Spring配置文件

一: Bean标签基本配置

1:用途

用于配置对象交由Spring来创建,默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。

2:基本属性(id

Bean实例在Spring容器中的唯一标识

3:Bean标签范围配置(scope

指对象的作用范围,取值如下:

1)当scope的取值为singleton时

Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
  对象创建:当应用加载,创建容器时,对象就被创建了
  对象运行:只要容器在,对象一直活着
  对象销毁:当应用卸载,销毁容器时,对象就被销毁了

2)当scope的取值为prototype时

Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
Bean的生命周期:
  对象创建:当使用对象时,创建新的对象实例
  对象运行:只要对象在使用中,就一直活着
  对象销毁:当对象长时间不用时,被java的垃圾回收器回收了

<bean id="userDao1" class="dao.impl.UserDaoImpl" scope="singleton"></bean>
或
<bean id="userDao2" class="dao.impl.UserDaoImpl" scope="prototype"></bean>
4: Bean生命周期配置(init-method,destroy-method)

init-method: 指定类中的初始化方法名称
destroy-method: 指定类中销毁方法名称

二: Bean实例化三种方式

1:无参构造方法实例化

<bean id="userDao" class="dao.impl.UserDaoImpl" scope="prototype"></bean>
2:工厂静态方法实例化
<bean id="userDao" class="factory.StaticFactory" factory-method="getUserDao"></bean>
3:工厂实例方法实例化
<bean id="factory" class="factory.DynamicFactory"></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>

三: Bean的依赖注入

1:Bean的依赖注入分析

目前UserService实例和UserDao实例都存在Spring容器中,当前的做法是在容器外部获得UserService实例和UserDao实例,然后在程序中进行结合。

因为UserService和UserDao都在Spring容器中,而最终程序直接使用的是UserService,所以可以在Spring容器中,将UserDao设置到UserService内部。

2: Bean的依赖注入概念

依赖注入(Dependency Injection): 它是Spring框架核心IOC的具体实现。
在编写程序时,通过控制反转,把对象的创建交给了Spring,但是代码中不可能出现没有依赖的情况,IOC解耦只是降低他们的依赖关系,但不会消除。
例如:业务层仍会调用持久层的方法。

3:怎么将UserDao怎样注入到UserService内部呢?

<bean id="userDao" class="dao.impl.UserDaoImpl" scope="prototype"></bean>

1)常用方法

<bean id="userService" class="service.serviceImpl.UserServiceImpl">

    <property name="userDao" ref="userDao"></property>

</bean>

2)set方法注入

P命名空间注入本质也是set方法注入,但比起上述的set方法注入更加方便,主要体现在配置文件中,如下:

首先,需要引入P命名空间:

xmlns:p="http://www.springframework.org/schema/p"

其次,需要修改注入方式

<bean id="userService" class="service.serviceImpl.UserServiceImpl" p:userDao-ref="userDao"/>

3)  有参构造方法注入

 <bean id="userService" class="service.serviceImpl.UserServiceImpl">
    <constructor-arg name="userDao" ref="userDao"></constructor-arg>
  </bean>

4: Bean的依赖注入的数据类型(三种数据类型)

上面的操作,都是注入的引用Bean,除了对象的引用可以注入,普通数据类型,集合等都可以在容器中注入。

1)普通数据类型
<bean id="userDao" class="dao.impl.UserDaoImpl"><property name="username" value="zhangsan"/>
</bean>
2)引用数据类型
<bean id="user1" class="domain.User"><property name="name" value="lisi"/><property name="address" value="biejing"/>
</bean><bean id="user2" class="domain.User"><property name="name" value="wangwu"/><property name="address" value="shanghai"/>
</bean>
3)集合数据类型
<bean id="userDao" class="dao.impl.UserDaoImpl"><property name="age" value="12"/><property name="strList"><list><value>aaa</value><value>bbb</value><value>ccc</value></list></property><property name="userMap"><map><entry key="u1" value-ref="user1"></entry><entry key="u2" value-ref="user2"></entry></map></property><property name="properties"><props><prop key="p1">ppp1</prop><prop key="p2">ppp2</prop><prop key="p3">ppp3</prop></props></property>
</bean>

四: 引入其他配置文件(分模块开发)

实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载

<import resource="applicationContext-user.xml"/>
<import resource="applicationContext-product.xml"/>

五:总结(Spring基本配置)

<bean>标签
 id属性:在容器中Bean实例的唯一标识,不允许重复
 class属性:要实例化的Bean的全限定名
 scope属性:Bean的作用范围,常用是Singleton(默认)和prototype
 <property>标签:属性注入
     naem属性:属性名称
     value属性:注入的普通属性值
     ref属性:注入的对象引用值
     <list>标签
     <map>标签
     <properties>标签
  <constructor-arg>标签
<import>标签:导入其他的Spring的份文件

本文是关于spring配置文件中的一些简单配置,希望可以帮到初学spring的小伙伴哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/319525.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全志R128硬件设计指南②

PCB设计 叠层设计 R128采用两层板或四层板设计。 2层板设计参考 4层板设计参考 SoC Fanout R128封装采用 8x8mm QFN设计&#xff0c;0.35mm ball pitch&#xff0c;0.17mm ball size&#xff0c;可支持 2 层板方案与 4 层板方案。 两层板 Fanout 建议 尽量保证 SOC 背面 …

nuxt3 env文件、全局变量处理

有两种方向 通过配置nuxt.config.ts Nuxt提供的钩子函数&#xff0c;实现全局变量的获取 runtimeconfig env文件往runtimeconfig放入内容 useAppConfig 通过env文件配置来获取服务端全局变量&#xff0c;客户端通过vite.define实现 nuxt.config.ts Nuxt钩子 1. runtim…

如何修复卡在恢复模式的Android 手机并恢复丢失的数据

Android 系统恢复是一项内置功能&#xff0c;如果您的 Android 设备无法正常工作或触摸屏出现问题&#xff0c;该功能会很有帮助。您可以启动进入恢复模式并使用它来恢复出厂设置您的 Android 设备&#xff0c;而无需访问设置。此外&#xff0c;它还经常用于重新启动系统、从 A…

关于MIPS上手应知应会-如何把C语言改写为MIPS!

文章目录 寄存器指令使用技巧翻译C/Cif/else语句switch语句for循环while 循环do...while循环一维数组定义与使用二维数组定义与使用例 &#xff1a;哈密顿回路 注意立即数被符号位扩展 参考链接 寄存器 NameReg. NumUsage z e r o zero zero0constant value 0(恒为0) a t at a…

「实战应用」如何用DHTMLX Gantt构建类似JIRA式的项目路线图(一)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 在web项目中使用DHTMLX Gantt时&#xff0c;开发人员经常需要满足与UI外观相关的各种需求。因此他们必须确定JavaScript甘特图库的…

C#编程-描述内存分配

描述内存分配 分配给变量的内存通过两种方式引用&#xff1a;值类型和引用类型。内置数据类型&#xff0c;诸如int、char和float都是值雷兴国。当您声明int变量时&#xff0c;编译器会分配一个内存块以保持该整数值。请思考以下语句&#xff1a; int Num 50;上述语句为保存值…

进阶学习——Linux系统中重点‘进程’

目录 一、程序和进程的关系 1.程序 2.进程 2.1线程 2.2协程 3.进程与线程的区别 4.总结 4.1延伸 5.进程使用内存的问题 5.1内存泄漏——Memory Leak 5.2内存溢出——Memory Overflow 5.3内存不足——OOM&#xff08;out of memory&#xff09; 5.4进程使用内存出现…

计算机视觉中的神经网络可视化工具与项目

前言 本文介绍了一些关于神经网络可视化的项目&#xff0c;主要有CNN解释器&#xff0c;特征图、卷积核、类可视化的一些代码和项目&#xff0c;结构可视化工具&#xff0c;网络结构手动画图工具。 CNN解释器 这是一个中国博士发布的名叫CNN解释器的在线交互可视化工具。 主要…

亚信安全捕获银狐木马控制端样本,揭晓最新发现

近日&#xff0c;亚信安全威胁情报中心获取到银狐远控样本&#xff0c;通过远控端生成一个Payload并对Payload进行分析&#xff0c;还原了银狐组织攻击的完整过程。建议相关用户部署全面防病毒产品&#xff0c;积极采取相关措施。 银狐木马简介 攻击者总是会将钓鱼页面部署在个…

第二证券机构策略:股指预计维持蓄势震荡格局 关注煤炭、电力等板块

第二证券以为&#xff0c;技能面看&#xff0c;在元旦节前资金抄底推进指数收回2900整数关口&#xff0c;并向着3000点渠道压力前进。沪指在底部均线位支撑摆放较强&#xff0c;调整空间估计不大&#xff0c;在3000点渠道下方调整就是再次优化低吸的时机。操作上&#xff0c;在…

[Flutter]WindowsOS上运行遇到的问题总结

[Flutter]WindowsOS上运行遇到的问题总结 写在开头 Flutter项目已能在移动端完美使用后&#xff0c;想看看在桌面端等使用情况 基于Flutter3.0后已支持Windows/MacOS等桌面端&#xff0c;不过具体的系统&#xff0c;还需要看下官方文档解释。 这里抛出文档地址&#xff0c;可…

力扣hot100 二叉树的直径

&#x1f468;‍&#x1f3eb; 题目地址 一个节点的最大直径 它左树的深度 它右树的深度 &#x1f60b; AC code /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* Tr…