Spring 自定义事件

  • 自定义事件

    编写和发布您自己的自定义事件需要采取许多步骤。按照本章中的说明编写,触发和处理自定义事件。
    假设我们拥有一个运行良好的Eclipse IDE,并采取以下步骤来创建一个Spring应用程序:
    1. 创建一个名称为SpringExample的项目,并在创建的项目的src文件夹下创建一个包com.jc2182
    2. 使用“添加外部JAR”选项添加所需的Spring库,如“Spring Hello World示例”一章中所述。
    3. 通过继承ApplicationEvent创建事件类CustomEvent。此类必须定义一个默认构造函数,该构造函数应从ApplicationEvent类继承构造函数。
    4. 一旦定义了事件类,就可以从任何类中触发它,让我们实现ApplicationEventPublisherAwareEventClassPublisher。您还需要在XML配置文件中将此类声明为Bean,以便容器可以将Bean标识为事件触发者,因为它实现了ApplicationEventPublisherAware接口。
    5. 可以在类中处理已触发的事件,比方说EventClassHandler,它实现ApplicationListener接口,并为自定义事件实现onApplicationEvent方法。
    6. 在src文件夹下创建Beans配置文件Beans.xml。
    7. 最后一步是创建所有Java文件和Bean配置文件的内容,然后按以下说明运行应用程序。
    以下是CustomEvent.java内容。
    package com.jc2182;
    
    import org.springframework.context.ApplicationEvent;
    
    public class CustomEvent extends ApplicationEvent{
       public CustomEvent(Object source) {
          super(source);
       }
       public String toString(){
          return "My Custom Event";
       }
    }
    以下是CustomEventPublisher.java文件的内容
    package com.jc2182;
    
    import org.springframework.context.ApplicationEventPublisher;
    import org.springframework.context.ApplicationEventPublisherAware;
    
    public class CustomEventPublisher implements ApplicationEventPublisherAware {
       private ApplicationEventPublisher publisher;
       
       public void setApplicationEventPublisher (ApplicationEventPublisher publisher) {
          this.publisher = publisher;
       }
       public void publish() {
          CustomEvent ce = new CustomEvent(this);
          publisher.publishEvent(ce);
       }
    }
    以下是CustomEventHandler.java文件的内容
    package com.jc2182;
    
    import org.springframework.context.ApplicationListener;
    
    public class CustomEventHandler implements ApplicationListener<CustomEvent> {
       public void onApplicationEvent(CustomEvent event) {
          System.out.println(event.toString());
       }
    }
    以下是MainApp.java文件的内容
    package com.jc2182;
    
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class MainApp {
       public static void main(String[] args) {
          ConfigurableApplicationContext context = 
             new ClassPathXmlApplicationContext("Beans.xml");
              
          CustomEventPublisher cvp = 
             (CustomEventPublisher) context.getBean("customEventPublisher");
          
          cvp.publish();  
          cvp.publish();
       }
    }
    以下是配置文件Beans.xml
    <?xml version = "1.0" encoding = "UTF-8"?>
    
    <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-3.0.xsd">
    
       <bean id = "customEventHandler" class = "com.jc2182.CustomEventHandler"/>
       <bean id = "customEventPublisher" class = "com.jc2182.CustomEventPublisher"/>
    
    </beans>
    创建完所有源文件并添加所需的其他库后,让我们运行该应用程序。
    My Custom Event
    My Custom Event