Spring Event
- 개발팀 남한희
1. 이벤트 란 무엇일까!!?
A. 이벤트란 사건! 한 객체를 기준으로 데이터가 변경되거나 상황이 변경 되었을 때 사건을 발생시켜 다른 클래스에서 이를 알도록 해주는 방식이다.
B. 윈도우는 이벤트 방식의 프로그래밍을 한다. 버튼이 클릭되었다, 화면이 지워졌다, 마우스가 움직인다 등의 이벤트가 정의 되어 있고, 이 이벤트를 잡아서 프로그래밍을 진행한다.
2. 이벤트의 구현
A. 이벤트 구현은 언어 단에서 지원을 해주는 부분이 있고, 자체적으로 구현을 해야 하는 경우가 있다.
B. 언어 레벨에서 지원을 해주는 언어는 C#! 델리게이터 라는 구분이 있어서 이벤트를 추가하거나 삭제 할수 있다.
C. 자바는 언어 레벨에서의 이벤트를 지원하지 않는다. 그렇기 때문에 이벤트 중심의 프로그래밍을 할 경우 이벤트 처리 엔진이 있어야 한다. 보통의 이벤트 처리 엔진은 디자인 패턴중 옵져버 패턴으로 구성된다. (옵저버 패턴은 따로 알아보기 바람)
3. Spring Level 의 Event
A. Spring 에서는 ApplicationContext 에서 이벤트를 사용 할 수 있도록 지원해준다.
B. Event 를 사용하기 위해선 3가지 구성 요소가 필요하다.
i. 이벤트 발생 Bean (옵저버 패턴중 Subject)
ii. 이벤트
iii. 이벤트 처리 Bean
4. Spring Level 의 Event 사용 절차
A. Bean 이 이벤트를 발생시킬지 유무를 결정한다.
B. 발생시킴을 결정하면 발생시킬 이벤트 객체를 만든다.
i. 이 객체는 ApplicationEvent 를 상속 받는다. (org.springframework..context.ApplicationEvent)
ii. 만약 Event 처리에 추가 데이터가 있다면 추가 데이터를 만들어준다.
public class G2ApplicationEvent extends ApplicationEvent
{
protected G2EventType eventType;
protected Object eventData;
// .. getter/setter 구현, 생성자 구현
}
C. 이벤트 발생 Bean 에서 이벤트 발생 타이밍에서 이벤트를 발생시킨다.
i. 이벤트 발생 Bean 에선 먼저 ApplicationContext 를 주입받는다.
@Autowired ApplicationContext applicationContext;
(주의 : WebApplicationContext 를 주입받아도 되지만 JUnit 테스트에 문제가 있음)
ii. 이벤트 발생은 ApplicationContext 의 publishEvent 를 이용한다.
applicationContext.publishEvent (new MyEvent (this, data);
D. 이벤트 처리 Bean 에서 처리할 이벤트를 구현함
i. ApplicationListener 를 implements 한다.
ii. ApplicationListener 은 제너릭 타입이기 때문에 수신 할 이벤트를 적어준다.
implements ApplicationListener<MyEvent>
iii. ApplicationListerner 의 onApplicationEvent(<T> arg0) 을 구현한다.
@Override
public void onApplicationEvent (MyEvent myEvent)
{
// 해당 이벤트 처리를 해준다.
}
iv. 만약 여러 이벤트를 처리 할 경우 해당 이벤트로 ApplicationListener 을 추가 구현한다.
v. 추가 구현시 당연히 onApplicationEvent 역시 추가되어야 한다.
vi. 이벤트를 구분하는 데이터는 onApplicationEvent 의 아규먼트 클래스 타입으로 구분한다. 또한 같은 인터페이스를 제너릭으로 달리 여러 번 구현하기 때문에 주석을 잘 달아주어 해당 이벤트 핸들러가 하는 일을 정확히 명시하도록 한다.!
'Spring > Base' 카테고리의 다른 글
Task, Scheduler 등록 (0) | 2012.04.18 |
---|