가 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 컨트롤러 스프링의 전방 단부로 사용하면.