Préface
L'article précédent a principalement appris la configuration, l'injection et l'éditeur de propriétés personnalisées des haricots. Aujourd'hui, connaissons le cycle de vie des haricots.
Tout ce qui a son propre cycle de vie, le début, la fin de la vie. Ce que vous connaissez le plus, c'est le cycle de vie des servlets. Comme les servlets, les haricots de printemps ont également leur propre cycle de vie.
Le cycle de vie est un nom très commun en développement, et essentiellement chaque langage de programmation peut le trouver associé. J'ai également cherché beaucoup de cycles de vie des haricots en ligne, et ils sont fondamentalement les mêmes. Ici, je veux principalement vérifier via le code. Après tout, les connaissances que j'ai apprises sont les mêmes, j'ai appris Java, et la chose la plus importante est de pratiquer la pratique, afin que je me souvienne davantage.
Vous trouverez ci-dessous une description de son cycle de vie, que nous vérifions par démo.
La figure suivante montre l'ordre dans lequel il est exécuté.
1. Créez une classe Liftcycle pour implémenter 5 méthodes d'interface: BeanfactoryAware, BeanNameAware, InitializingBean, DisposableBean, ApplicationContextAware
package cuiyw.spring.service; import org.springframework.beans.beansexception; import org.springframework.beans.factory.beanfactory; import org.springframework.beans.beans.factory.BeanNAMeware; import org.springframework.beans.factory.disposableBean; import org.springframework.beans.factory.initializingBean; import org.springframework.context.applicationContext; import org.springframework.context.applicationContex BeanfactoryAware, BeanNameAware, InitializingBean, DisposableBean, ApplicationContextAware {Nom de chaîne privée; public String getName () {System.out.println ("getName name =" + name); nom de retour; } public void setName (String name) {System.out.println ("setName name =" + name); this.name = name; } public void afterpropertiesset () lève une exception {// TODO Méthode générée automatique Stub System.out.println ("InitializingBean.AfterPropertiseSet ()"); } public void setBeAnName (String arg0) {// TODO Méthode générée automatique Stub System.out.println ("beannameaware.setBeanName"); } public void setBeanFactory (beanfactory arg0) lève BeanSexception {// TODO Méthode générée automatique Stub System.out.println ("beanfactoryAware.SetBeanFactory"); } public void destre () lève une exception {// TODO Méthode générée automatique Stub System.out.println ("DisposableBean.Destroy"); } public void MyInit () {System.out.println ("【Init-Method】 Appeler la méthode d'initialisation spécifiée par la propriété d'initiation de <Ean>"); } public void MyDestory () {System.out.println ("【destrust-méthode】 Appelant la méthode d'initialisation spécifiée par la propriété de destructure de la méthode de <Ean>"); } public void setApplicationContext (ApplicationContext Arg0) lève BeanSexception {// TODO Méthode générée automatique Stub System.out.println ("ApplicationContextAware.SetApplicationContext"); }}2. Enregistrez l'interface InstantiationAwareBeanPostProcessor
Package Cuiyw.Spring.Service; Import Java.beans.PropertyDescriptor; Import org.SpringFramework.Beans.BeansException; Import Org.SpringFramework.Beans.PropertyValues; import org.springframework.beansor; MyInstantiationAwareBeanPostProcessor implémente InstantiationAwareBeanPostProcessor {public Object Postprocessafterinitialization (objet bean, string beanname) lance BeanSexception {// TODO Auto-généré par Stub System.out.printlnn ("instanciationwarebeanpostprocessor.postprocessafterinitialilarisation"); Retour haricot; } Objet public PostProcessBeforeInitialization (Object Bean, String Beanname) lève BeanSexception {// TODO Méthode générée automatique Stub System.out.println ("InstantiationAwareBeanPostProcessor.postprocessBeforeInitialization"); Retour haricot; } public booléen postprocessafterinstantiation (objet bean, string beanname) lève BeanSexception {// TODO Méthode auto-générée Stub System.out.println ("InstantiationAwareBeanPostProcessor.postprocessaFterinstantiation"); Retour Vrai; } Objet public PostProcessBeforeInstanciation (classe <?> beanclass, string beanname) lève BeanSexception {// TODO Méthode générée automatique Stub System.out.println ("InstantiationAwareBeanPostProcessor.PostProcessbeforeinstantiation"); retourner null; } Public PropertyValues PostProcessProperTyValues (PropertyValues PVS, PropertyDescriptor [] PDS, objet bean, string beanname) lève BeanSexception {// TODO Méthode générée automatique Stub System.out.printLnn ("InstantiationAwareBeanPostProcessor.PostprocessPropertyValues"); Retour PVS; }}3. Enregistrez l'interface BeanPostProcessor
En fait, InstantiationAwareBeAnPostProcessor hérite BeanPostProcessor, j'ai donc également implémenté la méthode de l'interface BeanPostProcessor ci-dessus.
Package cuiyw.spring.service; import org.springframework.beans.beansexception; import org.springframework.beans.factory.config.beanPostProcessor; public class MyBeanPostProcessor implémente BeanPostprocessor {Pébrands postprocessadizitiation (flean d'objet (flean d'objet (flean) ForwesxExpeced // TODO Méthode générée automatique Stub System.out.println ("BeanPostProcessor.PostProcessAfterinitialization"); Retour haricot; } Objet public PostProcessBeforeInitialization (Object Bean, String Beanname) lève BeanSexception {// TODO Méthode générée automatique Stub System.out.println ("beanPostProcessor.postProcessBelfoForInitialization"); Retour haricot; }}4. Enregistrer l'interface BeanfactoryPostProcessor
package cuiyw.spring.service; import org.springframework.beans.beansexception; import org.springframework.beans.factory.config.beanfactorypostprocess MyBeanFactoryPostProcessor implémente BeanfactoryPostProcessor {public void PostProcessBeAnfactory (ConfigurableListableBeanfactory Arg0) lance BeanSexception {// Todo Generated Method Stub System.out.println ("beanfactorypostprocessor.postProcessBeanFactory"); }}5. Configurer dans le contexte
Je vais le modifier en fonction de la démo du blog précédent. Afin d'avoir d'autres interférences, je supprimerai d'abord le service.
<? xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: ScheMalocation = "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-Beans.xsd"> <Bean Id = "Beanpostprocessor"> </Eble> <Bean id = "InstantiationAwareBeAnPostProcessor"> </ bean> <bean id = "beanfactoryPostProcessor"> </ bean> <bean id = "lifecycle" init-method = "myinit" destrie-method = "MyDestory"> <propriété name = "name" value = "cuiyw1"> </prewet> </EAND> </pom
6. Utilisez des haricots dans le principal
package cuiyw.springaop; import org.springframework.beans.factory.beanfactory; import org.springframework.context.applicationContext; import org.springframework.context.support.classpathxmlapplicationcontex Cuiyw.spring.service.lifecycle; public class app {public static void main (string [] args) {applicationContext context = new ClassPathXmlApplicationContext (new String [] {"applicationContext.xml"}); Factoryfactory beanfactory = contexte; Lifecycle Lifecycle = Factory.getBean ("Lifecycle", Lifecycle.class); lifecycle.setName ("CUIYW2"); System.out.println ("lifecycle.name =" + lifecycle.getName ()); ((ClassPathxmlApplicationContext) Factory) .gisterShutdownHook (); /*Service=(iService)factory.getBean("Servicea "); Service.Service ("Cuiyw Servicea"); service = (iService) factory.getBean ("ServiceImpl"); Service.Service ("CUIYW ServiceImpl"); * /}}7. Entrez le résultat d'impression
On peut constater que l'ordre de sortie est fondamentalement le même que l'ordre de la figure ci-dessus.
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.