一、Bean的实例化
1、构造方法实例化(最常用)
2、静态工厂实例化
在工厂类中创建一个静态方法来创建Bean实例。
class属性指定该类为静态工厂类,
factory-method属性指定静态方法
<!-- 静态工厂方法实例化bean -->
<bean id="" class="" factory-method=""/>
3、实例工厂实例化
在工厂类中创建一个实例方法来创建Bean实例。
factory-bean属性指定该类为静态工厂类,
factory-method属性指定实例方法
<!-- 配置工厂 -->
<bean id="myFactory" class=""/>
<!-- 使用factory-bean属性指定配置工厂,使用factory-method属性指定使用工厂中的哪个方法实例化bean -->
<bean id="" factory-bean="myFactory" factory-method=""/>
二、Bean的作用域
singleton :默认值,在spring容器仅存在一个Bean实例。
prototype:每次从容器中调用Bean时,都创建一个新的实例。
request:同一个HTTP请求共享一个Bean,仅在Web Spring上下文环境中使用。
session:同一个HTTP Session共享一个Bean。仅在Web Spring上下文环境中使用。
application:同一个ServletContext共享一个Bean。仅在Web Spring上下文环境中使用。
三、Bean的生命周期
创建(实例化:开辟空间。初始化:对属性的初始化)、使用、销毁
作用域singleton自动销毁。prototype创建后容器不再跟踪其生命周期
四、Bean的装配方式
1、基于xml配置
构造方法注入方式装配。需要提供有参构造方法。
<bean id="user1" class="assemble.xml.ComplexUser">
<constructor-arg index="0" value=""/>
<constructor-arg index="1">
<list>
<value></value>
<value></value>
</list>
</constructor-arg>
<constructor-arg index="2">
<map>
<entry key="" value=""/>
<entry key="" value=""/>
</map>
</constructor-arg>
<constructor-arg index="3">
<set>
<value></value>
<value></value>
</set>
</constructor-arg>
<constructor-arg index="4">
<!-- 属性是数组时,list和array通用 -->
<list>
<value></value>
<value></value>
</list>
</constructor-arg>
</bean>
属性的setter方法注入方式装配。
把替换为 。index属性替换为name属性即可。
需要提供无参构造方法。
2、基于注解
作用于类:
@Component
@Repository
@Service
@Controller
作用于成员变量、构造方法、方法:
@Autowired:可消除getter、setter方法。默认按类型装配。
@Qualifier:指定实例名。配合@Autowired,将按名称装配。
@Resource:与@Autowired相同,区别在于按名称装配。(name和type属性,默认name)