ApplicationContext는 이벤트를 발생시킬수 있는 publishEvent()메소드 제공
void publishEvent(ApplicationEvent)
public abstract class ApplicationEvent extends EventObject{
...
public ApplicationEvent(Object source){
super(source);
this.timestamp=System.currentTimeMillis();
}
public final long
....
위 소스와 같이 생성자를 통해서 이벤트를 발생시킨 객체를 전달받는다.
ApplicationContext 를 통해 이벤트 발생시키고픈 빈은 ApplicationContextAware인터페이스를 구현한뒤 ApplicationContext를 전달받아 이벤트를 발생시키면 된다.
public class Member implements ApplicationContextAware{
private ApplicationContext context;
public void setApplicationContext(AppliocationContext context){
this.context=context;
}
public void regist(Member member){
....
context.publishEvent(new MemberRegistrationEvent(this,member));
}
}
그리고 이벤트 class 는 ApplicationEvnet클래스를 상속받아 구현하면 된다.
public class MemberRegistrationEvent extends ApplicationEvent{
private Member member;
public MemberRegistrationEvent(Object source, Member member){
super(source);
this.member=member;
}
public Member getMember(){
return member;
}
}
ApplicationContext가 발생시킨 이벤트를 처리할 클래스는 ApplicationListener인터페이스에 맞게 구현 ~
package org.springframework.context;
public Interface ApplicationListener extends EventListener{
void onApplicationEvent(ApplicationEvent event);
}
ApplicationContext는 이벤트 발생시 ApplicationListener인터페이스를 구현한 빈 객체의 onApplicationEvent()메소드 호출함으로서 이벤트를 전달한다.
ex)
public class CustomEventListener implements ApplicationListener{
@Override
public void onApplicationEvent(ApplicationEvent event){
if(event instanceof CustomEvent){
// ....
}
}
}
그리고 마지막으로 빈에 ApplicationListener 인터페이스 구현클래스를 등록해주면 ApplicationContext가 발생한 이벤트를 전달받아 처리할수 있다.
<beans xmlns=http://www.springframework.org/schema/beans"
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schmaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
....
. ...
<bean id="customEventListner"
class="spring.CustomEventListener"/>
</beans>
# ApplicationContext와 관련된 이벤트 종류
1. org.springframework.context.event.ContextRefreshedEvent
- ApplicationContext가 초기화되거나 설정 재로딩후 초기화를 주행시발생
2. org.springframework.context.event.ContextClosedEvent
- ApplicationContext 가 종료시 발생
3. org.springframework.context.event.ContextStartedEvent(2.5)
- ApplicationContext 시작시 발생
4. org.springframework.context.event.ContextStoppedEvent(2.5)
- ApplicationContext 중지시 발생