Spring Aware接口顺序

时间:2019-01-30 12:51:56

标签: spring dependency-injection interface inversion-of-control lifecycle

假设一个实现了https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/Aware.html

中所有Aware接口的bean

这些接口在生命周期中是否总是以特定顺序被调用?

我正在谈论的接口是:ApplicationContextAware,ApplicationEventPublisherAware,BeanClassLoaderAware,BeanFactoryAware,BeanNameAware,BootstrapContextAware,EmbeddedValueResolverAware,EnvironmentAware,ImportAware,LoadTimeWeaverAware,MessageSourceAware,NotificationPublisherAware,ResourceLoaderAware,SchedulerContextAware>。

1 个答案:

答案 0 :(得分:1)

请参见the docs for BeanFactoryApplicationContextAwareProcessor

  

Bean工厂实现应支持标准Bean   生命周期接口尽可能。全套   初始化方法及其标准顺序为:

     
      
  • BeanNameAware's setBeanName
  •   
  • BeanClassLoaderAware的setBeanClassLoader
  •   
  • BeanFactoryAware的{​​{1}}
  •   
  • setBeanFactory的setEnvironment
  •   
  • EnvironmentAware的setEmbeddedValueResolver
  •   
  • EmbeddedValueResolverAware的setResourceLoader(仅在在应用程序上下文中运行时适用)
  •   
  • ResourceLoaderAware的{​​{1}}(仅在应用程序上下文中运行时适用)
  •   
  • ApplicationEventPublisherAware的{​​{1}}(仅在应用程序上下文中运行时适用)
  •   
  • setApplicationEventPublisher的{​​{1}}(仅在应用程序上下文中运行时适用)
  •   
  • MessageSourceAware的{​​{1}}(仅在在Web应用程序上下文中运行时适用)
  •   
  • setMessageSource个方法的ApplicationContextAware方法
  •   
  • setApplicationContext的afterPropertiesSet
  •   
  • 自定义ServletContextAware方法定义
  •   setServletContext
  • postProcessBeforeInitialization个方法
  •   

您会注意到这不是完整列表。有些(例如BeanPostProcessor)会根据其父配置上下文的导入方式获得dynamically added to the list of PostProcessors。在这种情况下,您可以假定它们在列表的末尾,如果需要更多详细信息,则可以在调试器中进行跟踪。