spring学习笔记IOC高级特性

Posted 拐柒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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依赖注入方式

Spring4学习笔记2-配置Bean

学习笔记——Spring简介;Spring搭建步骤;Spring的特性;Spring中getBean三种方式;Spring中的标签

Spring学习笔记--Spring IOC

Spring学习笔记 IOC

Spring学习笔记3:IOC快速入门其他配置