Préface
Le conteneur IOC de Spring est très puissant, responsable de la création et de la gestion des haricots et autres fonctions de Spring. Les haricots de printemps sont une partie importante de toute l'application de printemps. Comprendre le cycle de vie des haricots de printemps sera d'une grande aide pour nous comprendre tout le cadre du printemps.
Beanfactory et ApplicationContext sont deux conteneurs importants du printemps. Le premier fournit le support le plus élémentaire pour l'injection de dépendance, tandis que le second étend ses fonctions en fonction de l'héritage de la première, comme l'ajout de fonctions telles que la propagation des événements, l'accès aux ressources et l'accès aux messages internationaux. Cet article présente principalement le cycle de vie des haricots dans deux conteneurs ApplicationContext et BeanFactory.
Premièrement, regardez le tableau du cycle de vie:
Parlons du cycle de vie avant d'en parler:
Le printemps nous aide uniquement à gérer le cycle de vie complet des haricots modèles singleton. Pour les prototypes de haricots, Spring ne gérera plus les cycles de vie ultérieurs après leur création et remis à l'utilisateur.
Méthode d'annotation
Il y a plusieurs étapes lors de l'initialisation du haricot. Tout d'abord, vous pouvez utiliser l'annotation @postConstruct et @Predestroy pour l'appeler au stade de la création et de la destruction du haricot:
@ComponentPublic class annotationBean {private final static logger logger = loggerfactory.getLogger (annotationBean.class); @PostConstruct public void start () {logger.info ("AnnotationBean start"); } @Predestroy public void destre () {logger.info ("AnnotationBean destre"); }}InitializingBean, DisposableBean Interface
Vous pouvez également implémenter les deux interfaces de InitializingBean et DisposableBean, qui sont également appelées pendant les étapes d'initialisation et de destruction:
@ServicePublic Class SpringlifecycleService implémente InitializingBean, DisposableBean {private final static logger Logger = LoggerFactory.getLogger (SpringlifecycleService.class); @Override public void AfterProperTiESSET () lève une exception {logger.info ("SpringLifecycleService start"); } @Override public void destre () lève une exception {logger.info ("SpringlifecycleService destrust"); }}Méthodes d'initialisation et de destruction personnalisées
Vous pouvez également personnaliser des méthodes d'appel pendant les étapes d'initialisation et de destruction:
@Configurationpublic class lifecycleConfig {@bean (initMethod = "start", destriethod = "destre") public springlifecycle create () {springlifecycle springlifycle = new SpringLifecycle (); retour springlifecycle; }} classe publique Springlifecycle {private final static logger logger = loggerfactory.getLogger (springlifecycle.class); public void start () {logger.info ("Springlifecycle start"); } public void destrement () {logger.info ("Springlifecycle destrust"); }}Ce qui précède est configuré dans Springboot de cette manière, et il peut également être utilisé s'il est basé sur XML d'origine:
<bean init-méthod = "start" destre-méthod = "destren"> </bEAN>
pour obtenir le même effet.
Implémentation * Interface consciente
* L'interface consciente peut être utilisée pour obtenir des objets au printemps lors de l'initialisation des haricots, comme l'obtention du contexte de ressort.
@ComponentPublic Class SpringLifecycleaware implémente ApplicationContextAware {private final static logger Logger = LoggerFactory.getLogger (Springlifecycleaware.class); application application privée applicationContext; @Override public void setApplicationContext (applicationContext ApplicationContext) lève BeanSException {this.ApplicationContext = applicationContext; Logger.info ("SpringLifecycleaware Start"); }}De cette façon, la méthode setApplicationContext sera appelée dans l'initialisation de SpringLifecycleaware Bean et l'objet ApplicationContext peut être obtenu.
Processeur amélioré de BeanPostprocessor
Implémentez l'interface BeanPostProcessor. Tous les haricots du printemps appellent deux méthodes de l'interface lors de l'initialisation, qui peuvent être utilisées pour traiter certains haricots spéciaux:
@ComponentPublic Class SpringLifecycleProcessor implémente BeanPostProcessor {private final static logger logger = loggerfactory.getLogger (SpringlifecycleProcessor.class); / ** * Appelé avant la pré-initialisation * @param bean * @param beanname * @return * @throws beanSexception * / @Override Object PostProcessBelfoForeInitialization (Object Bean, String Beanname) lève BeanSexception {if ("annotationbean" .equal beanname = {} ", beanname); } return bean; } / ** * Post-initialisation Initialisation du bean Call complet * @param bean * @param beanname * @return * @throws beansexception * / @Override Object Public postprocessafterinitialization (Object Bean, String Beanname) lance BeanSexception {if ("annotationBean" .Equals (beanname)) {logger.info ("SpringLificEcy beanname = {} ", beanname); } return bean; }}Résultats de l'observation après exécution:
018-03-21 00: 40: 24.856 [Restartedmain] Info CCSPSPringlifecycleProcessor - SpringLifecycleProcessor Start Beanname = AnnotationBean2018-03-21 00: 40: 24.860 [RestartedMain] Info2-21-203 00: 40: 24.861 [Restartedmain] Info CCSPSPringlifecycleProcessor - SpringLifecycleProcessor end beanname = AnnotationBean2018-03-21 00: 40: 24.864 [restartedMain] info ccsaware.springlifecclewaware - Springlifeccycleaware start2018-03-211 00: 40: 24.867 [Restartedmain] info ccspring.springlifecyclesService - SpringlifyCyleService start2018-03-21 00: 40: 24.887 [RestartedMain OSBDAOPTIONALALIVERELOADSERVER - Le serveur Liveload fonctionne sur le port 357292018-03-21 00: 40: 25.122 [Restartedmain] Info OsjeaannotationMbeanExporter - Enregistrement de beans pour l'exposition JMX sur Startup2018-03-21 00: 40: 25.140 [RESTARDMAIN] com.crossoverjie.Application - Application démarrée en 2,309 secondes (JVM fonctionne pour 3.681) 2018-03-21 00: 40: 25.143 [Restartedmain] Info com.crossoverjie.Application - Démarrer OK! 2018-03-21 00: 40: 25.153 [Thread-8] Info OscaannoTationConfigCappinionConCon org.springframework.context.annotation.annotationConfigApplicationContext@3913adad: Date de démarrage [Mer 21 mars 00:40:23 CST 2018]; Root of Context Hiérarchy2018-03-21 00: 40: 25.155 [Thread-8] Info OsjeaannotationMbeanExporter - Débarbarteur JMX-Beans Exposed on Shutdown2018-03-21 00: 40: 25.156 [Thread-8] Info CCSPring.SpringLifecycle - Springlifecylet destrust2018-03-21 00: 40: 25.156 [Thread-8] Info CCService.SpringlifecycleService - SpringLifecycleService Destren2018-03-21 00: 40: 25.156 [Thread-8] Info CCSpring.annotation.annotationBean - AnnotationBeanBean
Jusqu'à ce que le contexte de printemps soit détruit, une méthode de détruire personnalisée et la méthode de destruction () qui met en œuvre le DisposableBean seront appelées.
Résumer
Ce qui précède est le cycle de vie de Spring Bean introduit par l'éditeur. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!