目录
一、bean的配置
1.1 bean的基础配置
1.2 bean的别名配置
1.3 bean的作用范围配置
二、bean的实例化
2.1 bean是如何创建创建的?
2.2 使用静态工厂实例化bean
2.3 使用实例工厂实例化bean
三、bean的生命周期
3.1 什么是bean的生命周期
3.2 bean的生命周期的控制
3.3 怎么执行bean生命周期控制中的销毁方法
3.3.1 调用close方法
3.3.2 注册钩子关闭容器
四、DI依赖注入
4.1 setter注入
4.1.1 注入简单类型
4.1.2 注入引用类型
4.2 构造器注入
4.2.1 注入简单类型
4.2.2 注入引用类型
4.3 依赖自动装配
4.3.1 按类型自动装配
4.3.2 按名称自动装配
4.4 集合注入
4.4.1 注入数组类型数据
4.4.2 注入List类型数据
4.4.3 注入set类型数据
4.4.4 注入Map类型数据
4.4.5 注入Properties类型数据
前言: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>