머리말
Spring의 IOC 컨테이너는 매우 강력하며 Spring 's Beans 및 기타 기능의 생성 및 관리를 담당합니다. 스프링 콩은 전체 스프링 응용 프로그램의 중요한 부분입니다. 스프링 콩의 수명주기를 이해하면 전체 스프링 프레임 워크를 이해하는 데 큰 도움이 될 것입니다.
BeanFactory 및 ApplicationContext는 스프링의 두 가지 중요한 컨테이너입니다. 전자는 종속성 주입에 대한 가장 기본적인 지원을 제공하는 반면, 후자는 이벤트 전파, 리소스 액세스 및 국제 메시지 액세스와 같은 기능을 추가하는 것과 같은 전자를 물려받은 것에 기초하여 기능을 확장합니다. 이 기사는 주로 두 컨테이너 ApplicationContext 및 BeanFactory에서 콩의 수명주기를 소개합니다.
먼저 수명주기 차트를보십시오.
우리가 그것에 대해 이야기하기 전에 수명주기에 대해 이야기합시다.
Spring은 Singleton Model Bean의 전체 수명주기를 관리하는 데 도움이됩니다. 프로토 타입 Bean의 경우 Spring은 더 이상 사용자에게 나온 후에 후속 수명주기를 관리하지 않습니다.
주석 방법
콩을 초기화 할 때 몇 단계가 있습니다. 먼저, 주석 @postconstruct 및 @predestroy를 사용하여 콩의 생성 및 파괴 단계에서 호출 할 수 있습니다.
@ComponentPublic Class AnnotationBean {Private Final STATIC LOGGER = LOGGERFACTORY.GETLOGGER (AnnotationBean.class); @PostConstruct public void start () {logger.info ( "AnnotationBean Start"); } @predestroy public void destroy () {logger.info ( "AnnotationBean Destroy"); }}초기화 비, 일회용 비 인터페이스
초기화 및 파괴 단계에서 호출되는 초기화 비 및 일회용 비안의 두 인터페이스를 구현할 수도 있습니다.
@ServicePublic Class SpringLifeCycleservice는 초기화 비안, 연기 대지를 구현합니다. @override public void afterProperTiesset ()는 예외 {logger.info ( "springlifecycleservice start"); } @override public void destroy ()는 예외를 {logger.info ( "springlifecycleservice destroy"); }}사용자 정의 초기화 및 파괴 방법
초기화 및 파괴 단계에서 호출 방법을 사용자 정의 할 수도 있습니다.
@ConfigurationPublic Class LifeCycleConfig {@Bean (initMethod = "start", destroyMethod = "Destroy") public springLifeCycle Create () {SpringLifeCycle SpringLifeCycle = New SpringLifeCycle (); 반환 SpringLifeCycle; }} public class springLifeCycle {개인 최종 정적 로거 로거 = loggerFactory.getLogger (SpringLifeCycle.class); public void start () {logger.info ( "springlifecycle start"); } public void destroy () {logger.info ( "SpringLifeCycle Destroy"); }}위의는 이러한 방식으로 SpringBoot로 구성되며 원래 XML 기반 인 경우에도 사용할 수 있습니다.
<bean init-method = "start"destroy-method = "destroy"> </bean>
동일한 효과를 달성합니다.
*인식 인터페이스를 구현하십시오
*인식 인터페이스를 사용하여 스프링 컨텍스트를 얻는 등 콩을 초기화 할 때 봄에 일부 물체를 얻을 수 있습니다.
@ComponentPublic 클래스 SpringLifeCyCleAware 구현 ApplicationContextAware {개인 최종 정적 로그거 = loggerfactory.getLogger (SpringLifeCyCleAware.class); Private ApplicationContext ApplicationContext; @override public void setApplicationContext (ApplicationContext ApplicationContext)는 beansexception {this.applicationContext = ApplicationContext; logger.info ( "SpringLifeCyCleAware START"); }}이러한 방식으로 SpringLifeCyCleAware Bean의 초기화에서 SetApplicationContext 메소드가 호출되고 ApplicationContext 객체를 얻을 수 있습니다.
BeanPostProcessor 향상 프로세서
BeanPostProcessor 인터페이스를 구현하십시오. 스프링의 모든 콩은 초기화시 인터페이스에서 두 가지 방법을 호출합니다. 이는 일부 특수 콩을 처리하는 데 사용할 수 있습니다.
@ComponentPublic 클래스 SpringLifeCycleProcessor는 BeanPostProcessor를 구현합니다. / ** * 전 사전 시작 전 호출 * @param bean * @param beaname * @return * @throws beansexception */ @override public 객체 postprocessbeforeinitialization (객체 Bean, String Beanname) beansexception {if ( "annotationbean".equals (beanname)) beanname = {} ", beanname); } 반환 Bean; } / ** * 사후의 시작 Bean 초기화 완전한 호출 * @param bean * @param beanname * @return * @throws beansexception * / @override public object postprocessafterinitialization (객체 Bean, String Beaname)은 beansexception을 던졌습니다. beanname = {} ", beanname); } 반환 Bean; }}실행 후 관찰 결과 :
018-03-21 00 : 40 : 40 : 24.856 [RETARTEDMAIN] 정보 CCSPSPRINGLIFECYCYCLEPROCESSOR-SPRINLIFECYCLEPROCESS START BEANNAME = AnnotationBean2018-03-21 00 : 40 : 24.860 [RestartDmain] 정보 CCSPRING.ANNOT.ANNOTBEAN-24-AnnotationBean-AnnotationBean- 00 : 40 : 24.861 [RETARTEDMAIN] 정보 CCSPSPRINGLIFECYCLEPROCESSOR-SPRINGLIFECYCLEPROCESSOR END BEANNAME = AnnotationBean2018-03-21 00 : 40 : 24.864 [RETARTEDMAIN] 정보 CCSAWARE.SPRINGLIFECYCYCLEAWAR- SpringLifecyClewarwarwarwarwarwarwarware 00 : 40 : 24.867 [RETARTEDMAIN] 정보 CCSPRRING.SPRINGLIFECYCLESERVICE-SPRINGLIFECYCLESERVICE STRANT2018-03-21 00 : 40 : 24.887 [RETARTEDMAIN] 정보 CCSPRING.SPRINGLIFECYCLE-SPRINGLIFECYCER Start2018-021 00 : 40 : 40 : 40 : 40 : 40 : 40. [RETARTEDMAIN] 정보 OSBDAOPTIONARLIVERELOADSERVER- LiverEload Server가 포트에서 실행 중입니다. 357292018-03-21 00 : 40 : 25.122 [RETARTEDMAIN] 정보 OSJEAANNOTATIONMBEANEXPORTER- 시작에 JMX 노출을위한 Beans 등록 2018-03-21 00 : 40 : 25.140]. com.crossoverjie.application- 2.309 초 안에 응용 프로그램을 시작했습니다 (JVM 3.681에서 실행) 2018-03-21 00 : 40 : 25.143 [RETARTEDMAIN] info com.crossoverjie.application- 확인 시작! 2018-03-21 00 : 40 : 25.153 [THREAD-8] 정보 OSCAANNOTCONFUCTOMCOPPOLCATION CONTET- org.springframework.context.annotation.annotationconfigapplicationcontext@3913adad : 시작 날짜 [Wed 3 월 21:40:23 CST 2018]; 컨텍스트의 루트 Hierarchy2018-03-21 00 : 40 : 25.155 [Thread-8] Info OsjeaAnnotationMbeanExporter-Shutdown2018-03-21 00 : 40 : 25.156 [Thread-8] Infoccspring.springlifeccle- 00 : 40 : 25.156 [Thread-8] Info CCService.SpringLifeCycleservice-SpringLifeCycleservice Destrove2018-03-21 00 : 40 : 25.156 [Thread-8] Info Ccspring.annotation-Annotationbean-Annotationbean Destroy
스프링 컨텍스트가 파괴 될 때까지 맞춤 파괴 방법과 일회용 비를 구현하는 파괴 () 방법이 호출됩니다.
요약
위는 편집기가 소개 한 스프링 콩 수명주기입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!