프로그래머의 삶 Programmer's Life/SpringFramework

Spring Context Event

Oliver's World 2008. 11. 1. 15:44
728x90

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 중지시 발생

728x90