Spring BeanFactory支持的Bean生命周期接口和整套初始化方法顺序

据Spring 4.3.12.RELEASE版本的BeanFactory接口注释记载:

(以下由机器翻译:)
用于访问Springbean容器的根接口。这是bean容器的基本客户端视图;其他接口,如ListableBeanFactory和org.springframework.beans.factory.config。可配置BeanFactory可用于特定用途。

此接口由包含多个bean定义的对象实现,每个bean定义由String名称唯一标识。根据bean定义,工厂将返回包含对象的独立实例(Prototype设计模式)或单个共享实例(Singleton设计模式的高级替代,其中实例是工厂范围内的Singleton)。将返回哪种类型的实例取决于bean工厂配置:API是相同的。自Spring 2.0以来,根据具体的应用程序上下文(例如,web环境中的“请求”和“会话”作用域),可以使用更多的作用域。

这种方法的要点是BeanFactory是应用程序组件的中心注册中心,并集中配置应用程序组件(例如,单个对象不再需要读取属性文件)。请参阅“专家一对一J2EE设计和开发”的第4章和第11章,了解这种方法的好处。

请注意,通常最好依赖依赖注入(“推”配置)通过setter或构造函数配置应用程序对象,而不是使用任何形式的“拉”配置,如BeanFactory查找。Spring的依赖注入功能是使用此BeanFactory接口及其子接口实现的。

通常,BeanFactory将加载存储在配置源(如XML文档)中的bean定义,并使用org.springframework。beans包来配置beans。然而,实现可以简单地返回它根据需要直接在Java代码中创建的Java对象。对于如何存储定义没有任何限制:LDAP、RDBMS、XML、属性文件等。鼓励实现支持bean之间的引用(依赖注入)。

与ListableBeanFactory中的方法不同,如果这是HierarchicalBeanFactor,则此接口中的所有操作也将检查父工厂。如果在此工厂实例中未找到bean,将询问直接父工厂。这个工厂实例中的bean应该覆盖任何父工厂中同名的bean。

Bean工厂实现应该尽可能支持标准Bean生命周期接口,整套初始化方法及其标准顺序如下(共14个步骤):
Bean factory implementations should support the standard bean lifecycle interfaces as far as possible. The full set of initialization methods and their standard order is:

01. BeanNameAware's setBeanName
02. BeanClassLoaderAware's setBeanClassLoader
03. BeanFactoryAware's setBeanFactory
04. EnvironmentAware's setEnvironment
05. EmbeddedValueResolverAware's setEmbeddedValueResolver
06. ResourceLoaderAware's setResourceLoader (only applicable when running in an application context)
07. ApplicationEventPublisherAware's setApplicationEventPublisher (only applicable when running in an application context)
08. MessageSourceAware's setMessageSource (only applicable when running in an application context)
09. ApplicationContextAware's setApplicationContext (only applicable when running in an application context)
10. ServletContextAware's setServletContext (only applicable when running in a web application context)
11. postProcessBeforeInitialization methods of BeanPostProcessors
12. InitializingBean's afterPropertiesSet
13. a custom init-method definition
14. postProcessAfterInitialization methods of BeanPostProcessors

在关闭bean工厂时,以下生命周期方法适用:

  1. postProcessBeforeDestruction methods of DestructionAwareBeanPostProcessors
  2. DisposableBean’s destroy
  3. a custom destroy-method definition

参考:
BeanNameAware.setBeanName, BeanClassLoaderAware.setBeanClassLoader, BeanFactoryAware.setBeanFactory, org.springframework.context.ResourceLoaderAware.setResourceLoader, org.springframework.context.ApplicationEventPublisherAware.setApplicationEventPublisher, org.springframework.context.MessageSourceAware.setMessageSource, org.springframework.context.ApplicationContextAware.setApplicationContext, org.springframework.web.context.ServletContextAware.setServletContext, org.springframework.beans.factory.config.BeanPostProcessor.postProcessBeforeInitialization, InitializingBean.afterPropertiesSet, org.springframework.beans.factory.support.RootBeanDefinition.getInitMethodName, org.springframework.beans.factory.config.BeanPostProcessor.postProcessAfterInitialization, DisposableBean.destroy, org.springframework.beans.factory.support.RootBeanDefinition.getDestroyMethodName

猜你喜欢

转载自blog.csdn.net/Xidian2850/article/details/127544706