SpringでAplication Contectはイベントに対して伝達します.

13479 ワード

Apple Conteetにおけるイベント処理は、Appplication Event類とAppliation Listenerインターフェースを通じて提供され、Appplication ConteetのpublishEvent()方法によってApple Listenerに公開される. 
ここには三つのキャラクターが含まれています.リリースされたイベント、イベントのモニターとイベントの発表者です. 
事件の発表者は事件を発表する時、事件の傍受者に通知します. 
この三つのキャラクターをめぐって分析します. 
まずリリースされたイベントです.Springでは、このキャラクターはApple Eventクラスを引き継いでいます. 
また傍受者を見て、傍受者はApple Listenerインターフェースを実現しました. 
イベントの発表者はApplication ContactextAwareインターフェイスを実現し、publishEventメソッドを呼び出してイベントを発表します.ここでは,イベントはパラメータとしてこの方法に伝達される.
Apple Comptextはイベントをリリースする能力を持っています.このインターフェースはApplication Event Publisherインターフェースを継承しているからです.Springでは、イベントに関するインターフェースとクラスは、主にAppliation Event、Appliation Listenerを含む.
イベントのクラスを定義するには、Aplication EventまたはAppplication ContEventの抽象的なクラスを継承する必要があります.この抽象的なクラスには構成関数が一つしかありません.
また、Objectタイプのパラメータをイベントソースとして持ち、イベントソースはnullではないので、自分の構造関数でsuperを実行する必要があります.
(Object)

public class UserEvent extends ApplicationEvent

{

   private String eventContent;

   public String getEventContent(){

      return eventContent;

   }

   public void setEventContent(String eventContent){

      this.eventContent = eventContent;

   }

   public UserEvent(Object source,String eventContent){

      super(source);

      this.eventContent = eventContent;

   }

}
一つのイベントに対しては、特定のモニターが必要かもしれないので、モニタは、Appliation Listenerインターフェースを実現する必要がある.モニターがイベントを受信すると
という場合は、そのアプローチを実行します.SprigIoCのイベントモデルは簡単で、粗粒度のモニターモデルです.
イベントが到着すると、すべてのモニターが受信され、応答が行われます.いくつかのタイプに対してのみ傍受を希望するなら、コードに必要です.
コントロールを行う

public class UserListener implements ApplicationListener

{

   public void onApplicationEvent(ApplicationEvent event){

      if(event instanceof UserEvent){ //  UserEvent      

         UserEvent ue = (UserEvent)event;

         String result = ue.getEventContent();

         System.out.println("Event Content:"+result);

      }

   }

}
 
リリースイベントについては、Application ControtextAwareまたはApplication Event Publishereインターフェースを実現できます.

public class UserBiz implements ApplicationContextAware

{

private ApplicationContext applicationContext;

public void setApplicationContext(ApplicationContext applicationContext) throws BeansException

{

    this.applicationContext = applicationContext; 

}

public void service(String thing)

{

    UserEvent event = new UserEvent(this,thing);

    event.setEventContent("I shoud "+thing);

    applicationContext.publishEvent(event);

}   

}
または次のようにします

public class UserBiz2 implements ApplicationEventPublisherAware

{

private ApplicationEventPublisher applicationEventPublisher;

public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)

{

this.applicationEventPublisher = applicationEventPublisher;

}

public void service(String thing)

{

    UserEvent event = new UserEvent(this,thing);

    event.setEventContent("I shoud "+thing);

    applicationEventPublisher.publishEvent(event);

}

}
これで事件の発表が完了しました.Application Contectが事件を受信した後、イベントの放送はSpring内で行われました.
体の詳細.実際にはSpringでプロファイルを読み取り、反射を利用して、Appliation Listenerを実現するBeanをすべて探して、コンテナとして登録します.
のイベントモニターです.イベントを受信すると、Springはイベントモニターを1つずつ呼び出します.残りはプロファイルにモニターを配置することです.

 class="footprint.spring.ioc.event.UserListener"/>



Spring容器自体は、ContectClose Event、ContectRefreshedEvent、Contect StartEvent、
Conttext StopedEvent.