Spring 의 용기 이벤트 시스템 에 대해 말씀 드 리 겠 습 니 다.
8478 단어 Spring
이벤트 시스템 에서 이러한 개념 이 있 습 니 다. * 이벤트: java. util. EventObject. *모니터: java. util. EventListener. *이벤트 원본: 이벤트 가 발생 하면 모든 이벤트 가 하나의 이벤트 원본 을 가 져 야 합 니 다. *이벤트 감청 기 등록 표: 감청 기 를 저장 하 는 데 사 용 됩 니 다.이벤트 원본 에 이벤트 가 발생 하면 레 지 스 트 에 있 는 모니터 에 알려 줍 니 다. *이벤트 방송 기: 모니터 에 사건 을 알 리 는 일 을 맡 습 니 다.
때때로 이벤트 원본, 감청 기 등록 표 와 이벤트 방송 이라는 세 가지 역할 은 같은 대상 이 맡 을 수 있다. 예 를 들 어 java. swing 의 JButton 이다.
사건 체 계 는 사실 관찰자 모델 의 구체 적 인 실현 방식 이다.
1 Spring 이벤트 클래스 시스템
1.1 이벤트 클래스
ApplicationEvent 의 유일한 구조 함 수 는
ApplicationEvent(Object source)
입 니 다. source 를 통 해 이벤트 소스 를 지정 합 니 다. 두 가지 키 종류 가 있 습 니 다. * ApplicationContextEvent - 용기 사건 은 네 가지 키 종류 가 있 는데 각각 정지, 새로 고침, 닫 기, 시작 용기 사건 을 표시 합 니 다. *RequestHandled Event - 웹 응용 프로그램 과 관련 된 이벤트 입 니 다. HTTP 요청 을 처리 하면 이 이벤트 가 발생 합 니 다. (전 제 는 웹. xml 에서 Dispatcher Servlet 을 정의 합 니 다.)1.2 이벤트 모니터 인터페이스
응용 프로그램 Listener 인 터 페 이 스 는
onApplicationEvent(E event)
방법 만 정의 합 니 다. 응용 프로그램 이벤트 대상 을 받 아들 이 고 이 이벤트 의 응답 처리 논 리 를 실현 합 니 다.SmartApplication Listener 는 Spring 3.0 에 추 가 된 인터페이스 로 두 가지 방법 을 정의 합 니 다.
방법.
설명 하 다.
boolean supportsEventType(Class eventType)
어떤 종류의 용기 이 벤트 를 지원 할 지 지정 합 니 다.
boolean supportsSourceType(Class sourceType)
어떤 데이터 원본 에 응답 할 지 지정 합 니 다.
GenericApplicationListener 는 Spring 4.2 에 추 가 된 인터페이스 로 일반적인 지원 을 강화 합 니 다. 슈퍼 portsEventType () 방법의 매개 변 수 는 분석 가능 한 형식 ResolvableType 을 사용 합 니 다.이것 은 Spring 4 가 제공 하 는 일반적인 조작 지원 류 로 이 를 통 해 일반적인 실제 유형 정 보 를 쉽게 얻 을 수 있 습 니 다. 예 를 들 어 클래스, 필드 급 등 일반적인 정 보 를 얻 을 수 있 습 니 다.Spring 4 의 프레임 워 크 에서 많은 핵심 류 내부 와 관련 된 일반적인 작업 은 대부분 Resolvable Type 류 를 사용 하여 처리 합 니 다.
GenericApplicationListener 는 SmartApplicationListener 의 방법 기능 과 같은 두 가지 방법 을 정의 합 니 다.
1.3 이벤트 방송 기
Spring 은 이벤트 방송 기 에 인터페이스, 추상 류 와 간단 한 실현 류 를 정의 했다.
2 분석
응용 프로그램 Context 인터페이스의 추상 적 인 실현 류 Abstract 응용 프로그램 Context 는 이벤트 체 계 를 구축 했다.응용 프로그램 Event Multicaster 변 수 를 포함 합 니 다. 이 변 수 는 용기 모니터 의 레 지 스 트 를 제공 합 니 다.그리고 refresh () 는 다음 절 차 를 통 해 사건 의 인 프 라 를 구축 했다.
initApplicationEventMulticaster();
registerListeners()
finishRefresh()
Spring 은 반사 체 제 를 이용 하여 Bean Definition Registry 에서 ApplicationListener 를 실현 한 Bean 을 모두 찾 아 용기 로 등록 한 이벤트 모니터 를 찾 습 니 다.
3. 예시
만약 에 우리 가 문자 발송 기 가 필요 하 다 고 가정 하면 목적 번호 에 문 자 를 보 낼 때 사건 이 발생 한 다음 에 이 사건 을 등록 한 모니터 에 알 리 고 후속 적 인 업무 논리 작업 을 한다.
SmsSendEvent 이벤트:
public class SmsSendEvent extends ApplicationContextEvent {
/**
*
*/
private String target;
/**
* Create a new ContextStartedEvent.
*
* @param source the {@code ApplicationContext} that the event is raised for
* (must not be {@code null})
* @param target
*/
public SmsSendEvent(ApplicationContext source, String target) {
super(source);
this.target = target;
}
public String getTarget() {
return target;
}
}
SmssendEvent 는 applicationContextEvent 를 확장 하여 목적 번호 target 을 추가 하 였 습 니 다.
SmssendListener 감청 기 는 SmssendEvent 이 벤트 를 감청 합 니 다:
public class SmsSendListener implements ApplicationListener<SmsSendEvent> {
public void onApplicationEvent(SmsSendEvent event) {
System.out.println(" "+event.getTarget()+" ");
}
}
Smssender 는 applicationContextAware 인 터 페 이 스 를 실현 하여 이 벤트 를 발표 하 는 능력 을 가지 게 되 었 습 니 다.
public class SmsSender implements ApplicationContextAware {
private ApplicationContext context;
/**
* ,
*
* @param applicationContext
* @throws BeansException
*/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
/**
*
* @param target
*/
public void send(String target) {
System.out.println(" ");
SmsSendEvent event = new SmsSendEvent(context, target);
context.publishEvent(event);//
}
}
애플 리 케 이 션 Context 대상 을 통 해 이 벤트 를 보 내 고 해당 이벤트 모니터 에 알 립 니 다.
bean 설정:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<bean class="net.deniro.spring4.event.SmsSendListener"/>
<bean id="SmsSender" class="net.deniro.spring4.event.SmsSender"/>
beans>
유닛 테스트:
ApplicationContext context;
@BeforeMethod
public void setUp() throws Exception {
context = new ClassPathXmlApplicationContext("beans.xml");
}
@Test
public void test() {
SmsSender sender= (SmsSender) context.getBean("SmsSender");
sender.send("1892929xxxx");
}
용기 가 시작 되면 설정 파일 에 따라 Smssend Listener 모니터 를 자동 으로 등록 합 니 다.
출력 결과:
문자 보 내 려 고 합 니 다. 1892929xxxx 에 문자 보 내 려 고 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.