目录
前言:Spring炼气之路(炼气一层)-CSDN博客
一、bean的配置
1.1 bean的基础配置
id: bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一
class: bean的类型,即配置的bean的全路径类名
<bean id="bookDao" class = "com.zhang.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.zhang.service.impl.BookServiceImpl"/>
1.2 bean的别名配置
name:bean的别名,可以通过name值获取对应的bean,在容器中name值不唯一
<bean id="bookDao" name="name1 " class = "com.zhang.dao.impl.BookDaoImpl" />
<bean id="bookService" name="name2 name3" class="com.zhang.service.impl.BookServiceImpl"/>
1.3 bean的作用范围配置
scope: bean标签,singleton(单例) prototype(非单例)
<!-- 默认是singleton-->
<bean id="bookDao" name="name1 " class = "com.zhang.dao.impl.BookDaoImpl" scope="singleton"/>
<bean id="bookService" name="name2 name3" class="com.zhang.service.impl.BookServiceImpl" scope="prototype"/>
二、bean的实例化
2.1 bean是如何创建创建的?
bean本质上就是对象,创建bean使用构造方法完成(private修饰的构造方法也能创建实例化bean)
证明:
2.2 使用静态工厂实例化bean
factory-method:标明创建对象的工厂方法
<bean id="orderDao" class="com.zhang.factory.OrderDaoFactory" factory-method="getOrderDao"/>
2.3 使用实例工厂实例化bean
第一步:先创建工厂对象的bean
第二步:标明工厂方法和工厂bean对象
<bean id="userFactory" class="com.zhang.factory.UserDaoFactory"/>
<bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>
三、bean的生命周期
3.1 什么是bean的生命周期
3.2 bean的生命周期的控制
第一步:创建初始化和销毁方法
//表示bean初始化对应的操作
public void init() {
System.out.println("init");
}
//表示bean销毁前对应的操作
public void destroy(){
System.out.println("destroy");
}
第二步:在配置文件中配置生命周期
<bean id="bookDao" class="com.zhang.dao.impl.BookDaoImpl" init-method="init"
destroy-method="destroy"/>
3.3 怎么执行bean生命周期控制中的销毁方法
当虚拟机退出时,同时IOC容器来不及销毁,就不会调用销毁方法
3.3.1 调用close方法
调用ClassPathXmlApplicationContext对象的close方法
//创建ClassPathXmlApplicationContext对象
ClassPathXmlApplicationContext cptx = new ClassPathXmlApplicationContext("applicationContext.xml");
cptx.close();
3.3.2 注册钩子关闭容器
调用registerShutdownHook方法,在虚拟机退出之前关闭容器
ClassPathXmlApplicationContext cptx = new ClassPathXmlApplicationContext("applicationContext.xml");
cptx.registerShutdownHook();
四、DI依赖注入
4.1 setter注入
就是使用set方法传递数据
4.1.1 注入简单类型
使用<property/> 在里面用value属性
<property name="class" value="one"/>
4.1.2 注入引用类型
使用ref参照其他bean
<bean id="bookService" class="com.zhang.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
4.2 构造器注入
就是使用构造方法注入
4.2.1 注入简单类型
使用<contructor-arg />和value属性
<constructor-arg name="class" value="one"/>
4.2.2 注入引用类型
使用<contructor-arg />和ref属性
<bean id="bookService" class="com.zhang.service.impl.BookServiceImpl">
<constructor-arg name="bookDao" ref="bookDao"/>
</bean>
4.3 依赖自动装配
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
4.3.1 按类型自动装配
在<bean>标签中使用autowire属性= "byType"
<bean id="bookService" class="com.zhang.service.impl.BookServiceImpl"
autowire="byType"/>
4.3.2 按名称自动装配
在<bean>标签中使用autowire属性= "byName"
<bean id="bookService" class="com.zhang.service.impl.BookServiceImpl"
autowire="byName"/>
4.4 集合注入
集合中可以存放基本数据类型和引用数据类型,那么集合怎么注入依赖
4.4.1 注入数组类型数据
<property name="array">
<array>
<value> </value>
<value> </value>
</array>
</property>
4.4.2 注入List类型数据
<property name="list">
<list>
<value> </value>
<value> </value>
</list>
</property>
4.4.3 注入set类型数据
<property name="set">
<set>
<value> </value>
<value> </value>
</set>
</property>
4.4.4 注入Map类型数据
<property name="map">
<map>
<entry key="" value=""/>
<entry key="" value=""/>
</map>
</property>
4.4.5 注入Properties类型数据
<property name="properties">
<props>
<prop key=""> </prop>
<prop key=""> </prop>
</props>
</property>