这些接口在生命周期中是否总是以特定顺序被调用?
我正在谈论的接口是:ApplicationContextAware,ApplicationEventPublisherAware,BeanClassLoaderAware,BeanFactoryAware,BeanNameAware,BootstrapContextAware,EmbeddedValueResolverAware,EnvironmentAware,ImportAware,LoadTimeWeaverAware,MessageSourceAware,NotificationPublisherAware,ResourceLoaderAware,SchedulerContextAware>。
答案 0 :(得分:1)
请参见the docs for BeanFactory
和ApplicationContextAwareProcessor
:
Bean工厂实现应支持标准Bean 生命周期接口尽可能。全套 初始化方法及其标准顺序为:
BeanNameAware's
setBeanName
BeanClassLoaderAware
的setBeanClassLoaderBeanFactoryAware
的{{1}}setBeanFactory
的setEnvironmentEnvironmentAware
的setEmbeddedValueResolverEmbeddedValueResolverAware
的setResourceLoader(仅在在应用程序上下文中运行时适用)ResourceLoaderAware
的{{1}}(仅在应用程序上下文中运行时适用)ApplicationEventPublisherAware
的{{1}}(仅在应用程序上下文中运行时适用)setApplicationEventPublisher
的{{1}}(仅在应用程序上下文中运行时适用)MessageSourceAware
的{{1}}(仅在在Web应用程序上下文中运行时适用)setMessageSource
个方法的ApplicationContextAware
方法setApplicationContext
的afterPropertiesSet- 自定义
ServletContextAware
方法定义setServletContext
的postProcessBeforeInitialization
个方法
您会注意到这不是完整列表。有些(例如BeanPostProcessor
)会根据其父配置上下文的导入方式获得dynamically added to the list of PostProcessor
s。在这种情况下,您可以假定它们在列表的末尾,如果需要更多详细信息,则可以在调试器中进行跟踪。