ioc (2)

 

BeanFactoryApplicationContext

BeanFactoryIOC的核心组建,可以实现创建Bean实例,并进行bean的组装工作(依赖注入), ApplicatonContextBeanFactory的子接口,在BeanFactory的基础之上增加了国际化支持和对Bean声明周期的管理。在绝大多数的应用里我们都使用ApplicatonContext接口来进行编成

 

BeanFactory中的所有javabean是懒汉式加载

ApplicationContext中的所有singleton javabean都是采用预先加载,即在ApplicationContext被创建时就已经加载完毕

 

可通过构造函数来进行验证

 

Signleton Bean

由于进行依赖注入的大部分是业务对象( BO) ,所以在Spring中所有bean对象默认都采用singleton模式,以减少Bean创建和销毁而带来的系统开销,这要求所有bean因该具有线程安全的特点。如果某个Bean不能采用singleton模式来创建,需要在配置文件中特殊指明:

<bean id=”xxxx” class=”xxxxxx” singleton=”false”>…… </bean>

 

可以通过将同一个bean获取两次,比较状态来验证

 

Student stu = (Student)ctx.getBean( “stu” );

stu.setName( “lisi” ) ;

Student stu2 = (Student)ctx.getBean( “stu” ) ;

System.out.println( stu2.getName() ) ;

 

我们会发现sut2的名字与stu一致,可证明singleton特性

 

通过构造函数进行依赖注入

 

使用<property></property>进行依赖注入时,使用的是beanset方法,另外一种进行注入的方式就是构造函数 .

<bean id=”student” class=”ioc.bean.Student”>

       <construct-arg>

              <value></value> |<ref bean=””/> | list | set | map | props

       </construct-arg>

</bean>

解决构造函数参数的不确定性

 

bean存在多个参数时,spring 会根据参数类型来进行注入,但是当存在多个相同类型的参数时,就需要在配置文件中指明参数的顺序 :参数顺序从0开始

 

<constructor-arg index=” 0” >

</constructor-arg>

 

<constructor-arg index=” 1” >

</constructor-arg>

 

一般set注入优于构造函数注入,一方面构造函数参数顺序的调整会影响到注入的结果,另一方面set注入会使spring的配置文件可读性更好一些。

 

自动注入

 

后处理bean BeanPostProcessor

实现接口 BeanPostProcessor 可以在ApplicationContext实例化每一个类之后对刚刚实例化的对象进行处理

 

Public interface BeanPostPorcessor{

       Public Object postProcessBeforeInitialization( Object bean , String beanName );

       Public Object postProcessAfterInitialization( Object bean , String beanName ;

}

 

通常情况向,我们可以在这里生成bean的代理对象,将代理对象返回给ApplicationContext进行使用。

Bean的生命周期

 实例化

 依赖注入

 实例化

 POSTBean

 

 

 

 实例化

 

 

分散spring的配置文件

如果使用ApplicationContext对象的话,可以将Bean的配置信息分散到多个配置文件中

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值