一般指的是 bean 在容器中创建 -初始化-销毁的过程,在这之前会先进行bean的定义 先定义,再初始化 定义:
- Resource定位,定位到配置XML或者注解
- BeanDefinition载入,将Resource定位到的bean的信息保存到Bean的定义(BeanDefinition中,此时并不会创建Bean实例
- BeanDefinition的注册,将BeanDefinition的信息发布到Spring Ioc容器中,此时仍旧没有对应的Bean实例创建
- BeanNameAware's {@code setBeanName} 如果实现了,就执行该方法
- BeanClassLoaderAware's {@code setBeanClassLoader}
- BeanFactoryAware's {@code setBeanFactory}
- EnvironmentAware's {@code setEnvironment}
- EmbeddedValueResolverAware's {@code setEmbeddedValueResolver}
- ResourceLoaderAware's {@code setResourceLoader} (only applicable when running in an application context)
- ApplicationEventPublisherAware's {@code setApplicationEventPublisher} (only applicable when running in an application context)
- MessageSourceAware's {@code setMessageSource} (only applicable when running in an application context)
- ApplicationContextAware's {@code setApplicationContext} (only applicable when running in an application context)
- ServletContextAware's {@code setServletContext} (only applicable when running in a web application context)
- {@code postProcessBeforeInitialization} methods of BeanPostProcessors #进行预初始化
- InitializingBean's {@code afterPropertiesSet} #spring提供的初始化接口,可以覆写afterPropertiesSet方法来初始化
- a custom init-method definition #bean中自定义的初始化
- {@code postProcessAfterInitialization} methods of BeanPostProcessors #初始化后的后置处理器
- {@code postProcessBeforeDestruction} methods of DestructionAwareBeanPostProcessors 销毁前的后置处理
- DisposableBean's {@code destroy} #spring提供的销毁方法,覆写该接口的destroy方法来实现
- a custom destroy-method definition #bean中自定义的销毁方法
spring Ioc在执行了初始化和依赖注入后会执行一些步骤来完成初始化,我们能根据这来设置自定义初始化和销毁。 实现了相关接口才会在生命周期中调用它的方法 spring Ioc容器正常关闭时会调用一些步骤来关闭容器,释放资源。 spring Ioc容器的最低要求是实现BeanFactory接口,而非ApplicationContext接口,如果采用了非ApplicationContext子类创建Ioc容器,那么即使覆写了相应接口,也不会在生命周期中被调用。 当服务器正常关闭,或者遇到其他关闭spring Ioc容器的时间,它就会调用对应的方法完成Bean的销毁,步骤如下:
- 如果bean实现了接口DisposableBean的destroy方法,那么就会调用它
- 如果定义了自定义销毁方法,那么就会调用它
- 如果两者都有,先执行实现的DisposableBean的destroy,再执行自定义的销毁方法
- xml的init-method 和 destroy-method指定
- 注解@Bean来指定
- JSR250 javax.annotation的注解@postCunstruct和@preDestroy
标签:初始化,code,容器,Bean,SpringBean,bean,生命周期,Ioc From: https://www.cnblogs.com/deity-night/p/17208564.html