spring学习笔记(四)IOC高级特性

spring学习笔记(四)IOC高级特性

  • springIoC高级特性
    • lazy-init懒加载
      • 懒加载开启方式之xml
    • BeanFactory和FactoryBean
      • BeanFctory
      • FctoryBean
    • spring后置处理器
      • BeanPostProcessor
        • springBean生命周期
      • BeanFactoryPostProcessor

springIoC高级特性

lazy-init懒加载

懒加载就是在容器初始化bean 的时候不直接实例化该bean,在使用该bean的时候再进行实例化,懒加载使用情况分析
1、开启延迟加载⼀定程度提⾼容器启动和运转性能
2、对于不常使⽤的 Bean 设置延迟加载,这样偶尔使⽤的时候再加载,不必要从⼀开始该 Bean 就占
⽤资源

懒加载开启方式之xml

在bean定义之后添加属性 lazy-init=“true”,其本身默认为false,前提是该bean的scope为singleton。

 

或者可以定义在某个配置文件中进行全局定义


定义在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 {
}

xml中将该bean注入到spring容器中


        
    

通过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)