스프링 ApplicationContext의 이벤트 메커니즘

가 ApplicationEvent 클래스 및 만약 ApplicationListener 인터페이스 1 이벤트 ApplicationContext를 운반 할 수있다.

     ApplicationContext에가가 ApplicationEvent을 빼내려 만약 ApplicationListener 빈 컨테이너가있는 경우, 만약 ApplicationListener 빈은 자동으로 트리거됩니다.

봄 이벤트 프레임 워크 2, 두 가지 중요한 구성원 (예 : 이벤트, 리스너) :

     1 "가 ApplicationEvent : 컨테이너 이벤트, 해야 ApplicationContext에 의해 발표했다.

     2 "만약 ApplicationListener : 리스너에 의해 모든 리스너 컨테이너 빈 제공.

     이벤트의기구의 3 개 요소 : 이벤트 소스 (ApplicationContext의) 이벤트 (이벤트), 이벤트 리스너 (수신기).

     이벤트 이벤트 -> ApplicationContext를 이벤트 소스 출판 이벤트 -> 트리거 리스너 리스너 -> 리스너 수행 내부 onApplicationEvent (가 ApplicationEvent 전자) 방법, 전달 된 매개 변수로 이벤트 이벤트입니다.

     위의 과정에서, 오직 당신은 ApplicationContext의 출판 이벤트, 리스너가 자동으로 캡처됩니다 컨테이너에 빈의 만약 ApplicationListener를 달성하기 위해 등록해야합니다.

     beans.xml 환경 이벤트 리스너를 등록 할 실제 예 :

<? XML의 버전 = "1.0"인코딩 = "UTF-8" ?> 
<! - 루트 요소 봄 구성 파일, 스프링 콩 - 4.0.xsd 의미 론적 제약을 사용 -> 
< 에 xmlns : XSI = "HTTP : //www.w3.org/2001/XMLSchema-instance " 
       의 xmlns ="http://www.springframework.org/schema/beans " 
       XSI :의 schemaLocation ="http://www.springframework.org/schema/beans 
       HTTP "//www.springframework.org/schema/beans/spring-beans-4.0.xsd > 
      <! - 구성 청취자 -> 
      < 클래스 ="com.lfy.listener.EmailNotifier " /> 
</ >

     EmailNotifier.java 간단한 예제 코드 만약 ApplicationListener 인터페이스를 다음과 같이 :

에 대한 패키지 페널티 com.lfy.listener, 

가져 오기 org.springframework.context.ApplicationEvent,
 가져 오기 org.springframework.context.ApplicationListener, 

가져 오기 com.lfy.event.EmailEvent; 

/ ** 
 * 리스너 클래스의 컨테이너 이벤트 
 * @author LFY 
 * 
 * / 
공용  클래스 EmailNotifier 구현 만약 ApplicationListener {
     // 컨테이너가 입사 할 때이 방법이 자동으로 실행됩니다 
    @Override
     공공  무효 onApplicationEvent합니다 (가 ApplicationEvent EVT) {
         // 만 처리 EmailEvent는 이메일 알림 아날로그를 보낼 
        경우는 (EVT instanceof를 EmailEvent) {
            EmailEvent EmailEvent= (EmailEvent) EVT] 
            에서 System.out.println는 ( "주소가 메시지를 전송할 필요가 수신"+ emailEvent.getAddress ()) 
            에서 System.out.println ( "이메일 메시지 본문이 전송 될"+ emailEvent.getText ()); 
        } 다른 {
             // 어떤 처리없이 다른 이벤트 
            에서 System.out.println ( "다른 이벤트 :"+ EVT); 
        } 
    } 
}

    간단한 이벤트 상속가 ApplicationEvent 자바 콩 예를 EmailEvent.java

패키지 com.lfy.event; 

오기 org.springframework.context.ApplicationEvent; 

/ ** 
 * 이벤트기구의 ApplicationContext는 
 * 긴가 ApplicationEvent 자바 클래스가 그 클래스의 객체 기본 클래스 상속 
 * 컨테이너 선박 스프링 이벤트로서 사용될 수 
 * @author LFY 
 * 
 * / 
공용  클래스 EmailEvent (가) 확장 가 ApplicationEvent을 {
    개인 문자열 주소,
    개인 문자열 텍스트, 
   
   공공 문자열 getAddress에 () {
        반환 주소; 
   } 
   공공  무효 setAddress (문자열 주소) {
        은이를 .Address = 주소;
   } 
   공공gettext를 문자열 () {
        반환 텍스트; 
   } 
   공공  무효 의 setText (문자열 텍스트) {
        다음은이 는 .text = 텍스트; 
   } 
   
   공공 EmailEvent (소스 객체) {
        슈퍼 (소스); 
   } 
   // 생성자는 모든 멤버 변수 초기화 
   공공 EmailEvent을 (객체 소스, 문자열 주소, 문자열 텍스트) {
        슈퍼 (출처)
        은이 .Address = 주소;
        은이 는 .text = 텍스트; 
   } 
   
}

     이벤트를 게시하기위한 간단한 ApplicationContext를 이벤트 소스 프레젠테이션이 실행 프로세스 리스너를 트리거 :

     SpringListenerTest.java

패키지 com.lfy.main; 

수입 org.springframework.context.ApplicationContext;
수입 org.springframework.context.support.ClassPathXmlApplicationContext; 

수입 com.lfy.event.EmailEvent; 

공용  클래스 SpringListenerTest { 

    공공  정적  무효 메인 (문자열 []에 args) {
         // 创建스프링容器 
        의 ApplicationContext CTX = 새로운 ClassPathXmlApplicationContext ( "beans.xml 환경" ); 
        EmailEvent ELE = 새로운 EmailEvent ( "시험", "[email protected]", "이 테스트는" );
        // 发布容器事件
        ctx.publishEvent (ELE); 
    } 

}

    결과 :

   참고 : 시스템은 스프링 컨테이너 스프링이 장착 컨테이너를 만들 때 위의 "다른 사건"의 운영 결과, 컨테이너가 자동으로 컨테이너 이벤트의 파괴를 유발하기 때문에 (내장 이벤트), 컨테이너 이벤트 리스너는이 이벤트를 수신 할 수 있습니다. 활성 트리거 이벤트의 publishEvent (...)의 ApplicationContext의 컨테이너 이벤트 이벤트를 지정했습니다.

   당신이 지정된 이벤트의 출시 동안 빈 컨테이너 사업을하려는 경우, 당신은 ApplicationContext에 대한 참조가 빈 컨테이너를하자 획득 한 다음 지정된 컨테이너 이벤트 이벤트 ApplicationContext의 릴리스에 인도해야한다. 스프링 빈 컨테이너 취득하자

3, 내장 이벤트 봄이 제공 :

     1 "ContextRefreshedEvent : ApplicationContext에 컨테이너를 초기화하거나 새로 고침 이벤트를 트리거. 여기에서 초기화는 모든 빈 성공적 빈 후 처리가 활성화 검출되고, 이전의 싱글 콩 모두 초기화된다 ApplicationContext의 용기를 사용할 준비가 로딩되는 것을 의미했다.

     2 "ContextStartdEvent : 하위 인터페이스 ConfigurableApplicationContex 사용되는 ApplicationContext 인터페이스 () 메소드의 시작의 ApplicationContext 컨테이너를 시작할 때 이벤트가 트리거된다. 컨테이너 빈 인스턴스 관리 수명주기는 종종 상황이 일반적이다 중지해야 후 다시 시작 지정된 시작 신호를 받게됩니다.

     3 "ContextClossedEvent : ApplicationContext에 컨테이너를 폐쇄 ConfigurableApplicationContex 인터페이스 close () 메소드를 사용하여이 이벤트가 트리거된다.

     4 "ContextStoppedEvent : 용기 ConfigurableApplicationContex 인터페이스 정지 () 메소드 ApplicationContext를 정지 할 때 이벤트가 트리거된다. 컨테이너 관리 라이프 사이클의 콩 예 지정된 정지 신호를 받게됩니다, 여기에 의미 "정지". 정지 스프링 컨테이너가 개시를 호출하여 다시 방법을 재부팅 ().

     5 "RequestHandledEvent : 이벤트 관련 웹 만의 DispatcherServlet을을 사용하여 적용 할 수있는 웹 응용 프로그램 입니다. 스프링은 사용자가 요구 한 후, 시스템은 자동으로 이벤트를 트리거 할 MVC 컨트롤러 스프링의 전방 단부로 사용하면.

추천

출처www.cnblogs.com/ZeroMZ/p/11324173.html