spring学习笔记IOC高级特性
Posted 拐柒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring学习笔记IOC高级特性相关的知识,希望对你有一定的参考价值。
spring学习笔记(四)IOC高级特性
springIoC高级特性
lazy-init懒加载
懒加载就是在容器初始化bean 的时候不直接实例化该bean,在使用该bean的时候再进行实例化,懒加载使用情况分析
1、开启延迟加载⼀定程度提⾼容器启动和运转性能
2、对于不常使⽤的 Bean 设置延迟加载,这样偶尔使⽤的时候再加载,不必要从⼀开始该 Bean 就占
⽤资源
懒加载开启方式之xml
在bean定义之后添加属性 lazy-init=“true”,其本身默认为false,前提是该bean的scope为singleton。
<bean id="lazyResult" class="com.lagou.edu.pojo.Result" lazy-init="true"></bean>
或者可以定义在某个配置文件中进行全局定义
<beans default-lazy-init="true"></beans>
定义在bean标签上的优先级高于定义在beans标签上的全局配置。
BeanFactory和FactoryBean
BeanFctory
BeanFctory 是容器的定级接口,定义了容器的基础行为,负责生产和管理bean的一个工厂,我们具体使用的是子接口,比如applicationContext。
FctoryBean
spring 的bean中有两种bean,一种是普通bean,一种是工厂bean(FctoryBean)。FctoryBean可以生成某一个类型bean的实例返回,我们可以借用它来进行自定义创建bean的创建过程。
FctoryBean本身是一个接口,可以让我们自定义bean的创建过程,完成复杂bean的定义。
创建一个class,CompanyFactory实现FactoryBean
public class CompanyFactory implements FactoryBean<Company> {
}
xml中将该bean注入到spring容器中
<bean id="companyBean" class="com.lagou.edu.factory.CompanyFactory">
<property name="companyInfo" value="拉钩,北京,3"></property>
</bean>
通过applicationContext根据id获取bean的时候,获取的是该FctoryBean所创建的类,而不是该工厂类。
ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
Object companyBean = applicationContext.getBean("companyBean");
System.out.println(companyBean);
//输出结果为Company{name='xx', address='xx', scale='x'}
spring后置处理器
spring提供了两种后处理bean的脱战接口,分别为BeanPostProcessor和BeanFactoryPostProcessor。
工厂初始化(BeanFactory)—》bean对象
在BeanFactory初始化完成之后可以使用BeanFactoryPostProcessor进行一些后置处理
在bean对象实例化(并不是bean的生命周期完成)之后可以使用BeanPostProcessor进行后置处理。
BeanPostProcessor
springBean生命周期
1、实例化bean
2、设置属性值
3、调用BeanNameAware中的setBeanName方法
4、调用BeanFactoryAware中的setBeanFactory方法
5、调用ApplicationContextAware中的setApplicationContext方法
6、调用BeanPostProcessor中的postProcessBeforeInitialization方法
7、调用InitializingBean中的afterPropertiesSet方法
8、调用xml中定义的init-method
9、调用BeanPostProcessor中的postProcessAfterInitialization方法
10、判断是否单例,如果不是单例,将bean交给调用者,如果是单例,则放入spring缓存池中
11、bean销毁时先调用DisposableBean中destroy方法
12、再调用xml中定义的destroy-method
BeanFactoryPostProcessor
其中最主要方法是postProcessBeanFactory,最主要就是替换xml中替换的占位符。
以上是关于spring学习笔记IOC高级特性的主要内容,如果未能解决你的问题,请参考以下文章
学习笔记——Spring底层IOC实现;Spring依赖注入数值问题;Spring依赖注入方式
学习笔记——Spring简介;Spring搭建步骤;Spring的特性;Spring中getBean三种方式;Spring中的标签