• 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

  • 相关阅读:
    Multitor:一款带有负载均衡功能的多Tor实例创建工具
    Dubbo高手之路6,Dubbo 服务治理详解
    Air001 高级定时器输入捕获功能测量脉宽和频率
    json对齐行尾的注释 - 在vscode格式化
    操作系统——进程间通信——共享内存、消息队列、信号量
    2022年数学建模国赛--赛后总结
    AIGC扫盲和应用场景探究
    图片怎么转换成pdf?
    大模型之Bloom&LLAMA----RHLF(强化学习)
    化妆品行业如何开启新零售模式?你懂了吗
  • 原文地址:https://blog.csdn.net/Xidian2850/article/details/127544706