Spring的常见接口

Bean的声明周期接口

InitializingBean.afterPropertiesSet()

这个方法将在所有的属性被初始化后调用。这个时声明的针对具体bean的。

DisposableBean.destroy()

这个方法将在bean在销毁时调用,这个声明时针对具体类的。
以上这两个接口窃以为都是为不习惯在配置文件中写init-method和destroy-method的人提供。

BeanPostProcessor

BeanPostProcessor是Spring中定义的一个接口,其与之前介绍的InitializingBean和DisposableBean接口类似,也是供Spring进行回调的。里面包含postProcessBeforeInitialization和postProcessAfterInitialization。所有bean都会经过这些方法。

InstantiationAwareBeanPostProcessor

是上面接口的子接口。postProcessBeforeInstantiation将在具体bean进入构造函数之前执行,而postProcessPropertyValues将在bean结束构造函数执行。和他的父接口不同,这个接口的实现类不需要手工绑定。

总结如下:
建立时:
postProcessBeforeInitialization(所有) -> InitializingBean.afterPropertiesSet(单个) -> init-method(单个) -> postProcessAfterInitialization(所有)

销毁时
DisposableBean.destroy -> destroy-method

Spring声明周期接口

Spring的启动

            context = new ClassPathXmlApplicationContext(new String[]{
                    "applicationContext.xml"

类似这样的代码是无法启动Spring的!!这样写的化Spring的启动发生在你第一次getbean。当然,你可以手动调用

context.start()

Spring启动的第一件事就是加载配置文件。

实例化并执行BeanDefinitionRegistryPostProcessor

如果一个bean实现了这个接口,在所有bean完成定义注册时,spring将调用这个方法一次。在这个方法里,你可以手动新增bean。这也意味着BeanDefinitionRegistryPostProcessor的实现bean将被在这个步骤之前完成了实例化。

实例化并执行BeanFactoryPostProcessor

在bean实例化之前执行的。也就是说,Spring允许BeanFactoryPostProcessor在容器创建bean之前读取bean配置元数据,并可进行修改。这也意味着BeanFactoryPostProcessor的实现bean将被在这个步骤之前完成了实例化。

实例化InstantiationAwareBeanPostProcessor。

此时,spring已经完成准备工作。将抛出ContextRefreshedEvent事件。

以上两者的总结如下图
这里写图片描述
这里写图片描述

另外一张很有用的图为
这里写图片描述

猜你喜欢

转载自blog.csdn.net/define_us/article/details/80060384