Cet article analyse de manière approfondie le cycle de vie de Spring Bean, qui couvre toutes les interfaces et méthodes de cycle de vie associées couvrant l'interface de haricot pour présenter pleinement le processus de fonctionnement du Bean.
(instancié à la destruction)
Spring à partir du fichier de configuration
(@configuration), du fichier XML ou de la numérisation des composants (@Component)BeanDefinitionRegistry#registerBeanDefinition()
La fonction constructive est instanciée
InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
(.
Cela s'est produit avant avant l'injection BeanNameAware#setBeanName(String name)
.
BeanNameAware
dans le contexte de l'application. setBeanName()
<code class="language-java">public class MyBean implements BeanNameAware { @Override public void setBeanName(String name) { System.out.println("Bean Name Set: " + name); } }</code>
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)
<code class="language-java">public class MyBean implements BeanFactoryAware { @Override public void setBeanFactory(BeanFactory beanFactory) { System.out.println("BeanFactory Set!"); } }</code>
Définissez l'analyse de valeur intégrée EnvironmentAware#setEnvironment(Environment environment)
(
<code class="language-java">public class MyBean implements BeanNameAware { @Override public void setBeanName(String name) { System.out.println("Bean Name Set: " + name); } }</code>
Définissez le chargeur de ressources () ResourceLoaderAware#setResourceLoader(ResourceLoader loader)
)
ApplicationEventPublisherAware#setApplicationEventPublisher(ApplicationEventPublisher publisher)
Si Bean a besoin de
ContextRefreshedEvent
Si Bean a besoin de Internationalisation (I18N) pour soutenir MessageSourceAware#setMessageSource(MessageSource source)
, le printemps injectera MessageSource.
Si Bean doit accéder à l'ensemble de l'application SpringContext , cette méthode sera appelée. ApplicationContextAware#setApplicationContext(ApplicationContext ctx)
, utilisées pour accéder aux informations de contexte Web . ServletContextAware#setServletContext(ServletContext ctx)
haricot modifié.
BeanPostProcessor#postProcessBeforeInitialization()
Custom
InitializingBean
afterPropertiesSet()
@PostConstruct
@Bean
) init-method
<code class="language-java">public class MyBean implements BeanClassLoaderAware { @Override public void setBeanClassLoader(ClassLoader classLoader) { System.out.println("ClassLoader Set!"); } }</code>
BeanPostProcessor#postProcessAfterInitialization()
.
)
DestructionAwareBeanPostProcessor#postProcessBeforeDestruction()
permet de nettoyer avant la destruction
DisposableBean
Si Bean est implémenté, destroy()
sera appelé.
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>
Appelez avant le haricot détruit . @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
trois, le résumé complet du processus (ordre final)
()
new Bean()
setBeanName()
BeanNameAware
(setBeanClassLoader()
(BeanClassLoaderAware
) setBeanFactory()
) BeanFactoryAware
setEnvironment()
EnvironmentAware
(setEmbeddedValueResolver()
(EmbeddedValueResolverAware
) setResourceLoader()
ResourceLoaderAware
setApplicationEventPublisher()
ApplicationEventPublisherAware
setMessageSource()
MessageSourceAware
setApplicationContext()
(ApplicationContextAware
) setServletContext()
) ServletContextAware
postProcessBeforeInitialization()
BeanPostProcessor
@PostConstruct
Plus d'informations sur Interface et méthodes, veuillez visiter: afterPropertiesSet()
https://www.php.cn/link/6759d0996526ddc8e27aa550f0b806b1 postProcessAfterInitialization()
Je vous souhaite un codage heureux! ? BeanPostProcessor
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!