Spring配置文件
注:实例的项目是idea中创建的普通Maven项目*
1.scope的作用范围配置
scope测试
- singleton(默认配置)
配置方法
测试
- prototype
配置方法
bean标签的scope属性改为prototype
测试
2.Bean生命周期配置
- 在bean(UserDaoImpl)中添加init和destroy方法
- 在applicationContext.xml的bean标签配置
Jubit单元测试结果
注:单元测试中因为还没来得及调用destroy方法就结束了,所以要调用ClassPathXmlApplicationContext类的close方法通知容器销毁。bean的scope属性要为singleton,prototype属性的bean对象还在使用就不会销毁。
3.Bean的三种创建方式
-
无参构造方法实例化(重点)
上面的操作全是无参构造
-
工厂静态方法实例化(了解)
配置(applicationContext.xml)
<bean id="UserDao" class="com.boo.factory.StaticFactory" factory-method="getUserDao">
-
/** * 静态工厂实现bean */ public class StaticFactory { // 静态工厂方法,返回bean public static UserDao getUserDao(){ return new UserDaoImpl(); } }
-
工厂实例方法实例化(了解)
配置(applicationContext.xml)
<!-- 工厂实例方法实例化--> <bean id="factory" class="com.boo.factory.DynamicFactory" ></bean> <bean id="UserDao" factory-bean="factory" factory-method="getUserDao"/> </beans>
/** * 工厂实例方法实例化 */ public class DynamicFactory { // 工厂方法,返回bean public UserDao getUserDao(){ return new UserDaoImpl(); } }
tips:鼠标放在要获取的类名上面,鼠标右键,选择Copy Reference得到该类的全限定名.
应用场景:Connection需要调用DriverManage的getCon方法来实例化
4.Bean的依赖注入
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
怎么将UserDao注入到UserService内部呢?
-
set方法注入
配置
<bean id="UserService" class="com.boo.dao.impl.UserServiceImpl"> <property name="userDao" ref="UserDao"></property> </bean>
注:userDao为UserServiceImpl类中需要被Set方法修改的成员变量,UserDao为UserDaoImpl的id名
UserServiceImpl类:
-
有参构造注入
配置
<bean id="factory" class="com.boo.factory.DynamicFactory"></bean> <bean id="UserService" class="com.boo.dao.impl.UserServiceImpl"> <!-- 有参构造注入--> <constructor-arg name="userDao" ref="UserDao"></constructor-arg> </bean> </beans>
5.Bean依赖注入的数据类型
-
引用数据类型
4中的操作,都是注入的引用Bean,除了对象的引用可以注入,普通数据类型,集合等都可以在容器中进行注入。
-
普通数据类型
<bean id="UserDao" class="com.boo.dao.impl.UserDaoImpl"> <property name="username" value="张三"></property> <property name="userid" value="5"></property> </bean>
问题:不知道为什么在工厂实例下配置总是报错
-
集合数据类型
将集合用set方法注入
配置
<bean id="UserDao" class="com.boo.dao.impl.UserDaoImpl" >
-
List
<property name="strList" > <list> <value>aaa</value> <value>bbb</value> <value>ccc</value> </list> </property>
-
Map<String,User>
<property name="userMap"> <map> <entry key="u1" value-ref="User1"></entry> <entry key="u2" value-ref="User2"></entry> </map> </property> <bean id="User1" class="com.boo.domain.User"> <property name="addr" value="dongguan"></property> <property name="name" value="zhangsan"></property> </bean> <bean id="User2" class="com.boo.domain.User"> <property name="addr" value="Changsha"></property> <property name="name" value="lisan"></property> </bean>
-
properties
<property name="properties"> <props> <prop key="p1">ppp</prop> <prop key="p2">ppp</prop> <prop key="p3">ppp</prop> </props> </property> </bean>
</bean>
6.引入其他配置文件(分模块开发)
实际开发中,Spring的配置内容会非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件照片那个通过inport标签进行加载
配置
<import resource="applicationContext-xxx.xml"></import>
注意:import的标签和bean标签同级,在beans标签下
7.spring开发步骤总结
1.在pom.xml里导入坐标
2.创建Bean
3.创建Bean实现接口
4.创建applicationContext.xml,并将Bean配置
5.创建ApplicationContetxt对象getBean