SpringBean的生命周期

Spring Bean Lifecycle
1 过程
1)调用无参构造

2)执行 set 方法设置属性

也可以是 @Bean 注解方法内容

3)调用 BeanNameAware 的 setBeanName 方法

可以获得 Bean 的名字

4)调用 BeanClassLoaderAware 的 setBeanClassLoader 方法

可以获得 ClassLoader 对象的实例

5)调用 BeanFactoryAware 的 setBeanFactory 方法

可以获得 BeanFactory,主要用来检测作用域

6)调用 EnvironmentAware 的 setEnviroment 方法

可以获得当前环境下所有配置解析

7)调用 EmbeddedValueResolverAware 的 setEmbeddedValueResolver 方法

设置配置解析器

8)调用 ResourceLoaderAware 的 setResourceLoader 方法

可以获得当前加载的所有资源文件

9)调用 ApplicationEventPublisherAware 的 setApplicationEventPublisher 方法

可以获得所有上下文的发布事件

10)调用 MessageSourceAware 的 setMessageSource 方法

处理 MessageSource 类型的 Bean

11)调用 ApplicationContextAware 的 setApplicationContext 方法

可以获得上下文对象,主要获取所有 Bean的名字

12)调用 ServletContextAware 的 setServletContext 方法

实现该方法,可以使用 ServletContext 来执行自己想要的操作。

13)执行 BeanPostProcessor 的 postProcessBeforeInitialization 方法

在每一个 Bean 初始化之前执行的方法(有多少 Bean 调用多少次)

14)执行标注 @PostConstruct 注解的方法

一般标注在 init 方法上,表示初始化方法)

15)执行 InitializingBean 的 afterPropertiesSet 方法

在『当前 Bean 』的属性设置之后才会进行调用(设置 Bean 的属性包括:@Value,@Resource 等)

某个 Bean 的 afterPropertiesSet 方法执行完毕,才会执行下一个 Bean 的 afterPropertiesSet 方法,依据实例化顺序来算。

16)执行配置的 init-method

配置指定的初始化方法

底层使用反射实现

17)执行 BeanPostProcessor 的 postProcessAfterInitialization 方法

在所有 Bean 初始化之后执行的方法(有多少 Bean 调用多少次)

2 额外注意
SmartInitializingSingleton
所有非lazy单例 Bean 加载完成后的回调方法,不是初始化完成,而是加载完成

ApplicationListener
最后调用 onApplicationEvent方法,因为 onApplicationEvent 会被频繁执行,基于观察者模式,需要使用它监听,必须要考虑性能问题。每当在一个 ApplicationEvent 发布到 ApplicationContext 时,这个 Bean 会到通知。 作者:沉默的反补 https://www.bilibili.com/read/cv5926940/ 出处:bilibili

                            

你可能感兴趣的:(java,spring,前端)