この記事では、Beanの動作プロセスを完全に提示するためにBeanFactoryインターフェイスをカバーするすべての関連するライフサイクルインターフェイスと方法をカバーするSpring Beanのライフサイクルを包括的に分析します。
I.スプリングビーンライフサイクルロジック実行順序(インスタンス化から破壊まで)
(破壊に導かれた)
構成ファイル(@configuration)、xmlファイルまたはコンポーネントスキャン(@component)
bean定義を読み取ります。BeanDefinitionRegistry#registerBeanDefinition()
工場メソッド
InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
bean実装
ユースケース:beanがアプリケーションのコンテキストでその名前を知る必要がある場合。 BeanNameAware#setBeanName(String name)
BeanNameAware
setBeanName()
<code class="language-java">public class MyBean implements BeanNameAware { @Override public void setBeanName(String name) { System.out.println("Bean Name Set: " + name); } }</code>
set beanfactory (BeanClassLoaderAware#setBeanClassLoader(ClassLoader classLoader)
)
<code class="language-java">public class MyBean implements BeanClassLoaderAware { @Override public void setBeanClassLoader(ClassLoader classLoader) { System.out.println("ClassLoader Set!"); } }</code>
)
BeanFactoryAware#setBeanFactory(BeanFactory factory)
beanが
<code class="language-java">public class MyBean implements BeanFactoryAware { @Override public void setBeanFactory(BeanFactory beanFactory) { System.out.println("BeanFactory Set!"); } }</code>
<code class="language-java">public class MyBean implements BeanNameAware { @Override public void setBeanName(String name) { System.out.println("Bean Name Set: " + name); } }</code>
()
ResourceLoaderAware#setResourceLoader(ResourceLoader loader)
beanがイベントを公開する必要がある場合、この方法は呼び出されます。 ApplicationEventPublisherAware#setApplicationEventPublisher(ApplicationEventPublisher publisher)
ContextRefreshedEvent
メッセージソースを設定します
MessageSourceAware#setMessageSource(MessageSource source)
ApplicationContextAware#setApplicationContext(ApplicationContext ctx)
初期化の前のプロセスのポスト(ServletContextAware#setServletContext(ServletContext ctx)
)
BeanPostProcessor#postProcessBeforeInitialization()
初期化されたポストトリートメントの後、
InitializingBean
beanを変更します。 afterPropertiesSet()
@PostConstruct
を作成するために使用されます。 @Bean
init-method
破壊される前の治療
破壊の前に片付けることができますDestructionAwareBeanPostProcessor#postProcessBeforeDestruction()
。
Beanが実装されている場合、DisposableBean
が呼び出されます。 destroy()
DisposableBean
destroy()
<code class="language-java">public class MyBean implements BeanNameAware { @Override public void setBeanName(String name) { System.out.println("Bean Name Set: " + name); } }</code>
。 @PreDestroy
DisposableBean
custom<code class="language-java">public class MyBean implements BeanClassLoaderAware { @Override public void setBeanClassLoader(ClassLoader classLoader) { System.out.println("ClassLoader Set!"); } }</code>
destroy-method
@Bean
3、完全なプロセスの概要(最終順序)
new Bean()
setBeanName()
BeanNameAware
(setBeanClassLoader()
(BeanClassLoaderAware
)setBeanFactory()
)BeanFactoryAware
setEnvironment()
EnvironmentAware
(setEmbeddedValueResolver()
(EmbeddedValueResolverAware
)setResourceLoader()
ResourceLoaderAware
setApplicationEventPublisher()
ApplicationEventPublisherAware
setMessageSource()
Beanの破壊段階MessageSourceAware
setApplicationContext()
ApplicationContextAware
(setServletContext()
ServletContextAware
postProcessBeforeInitialization()
BeanPostProcessor
@PostConstruct
afterPropertiesSet()
以上がSpring-:Spring-Bean-Lifecycle-Execution-Orderの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。