Spring容器事件、自定义事件

Spring容器内置事件,如容器的启动、停止、关闭、销毁等事件

<bean name="contextStartedHandler" class="com.nuts.demo.spring.ContextStartedHandler">
    </bean>
    <bean name="contextStopedHandler" class="com.nuts.demo.spring.ContextStopedHandler"/>
public class ContextStartedHandler implements ApplicationListener<ContextStartedEvent> {

    @Override
    public void onApplicationEvent(ContextStartedEvent contextStartedEvent) {
        System.out.println("Spring容器启动完成");
    }
}
public static void main(String[] args) {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        context.start();//启动容器
        context.stop();//停止容器
    }

也可以自定义事件:

1、通过扩展 ApplicationEvent,创建一个事件类 CustomEvent。这个类必须定义一个默认的构造函数,它应该从 ApplicationEvent 类中继承的构造函数。一旦定义事件类,你可以从任何类中发布它

public class CustomEvent extends ApplicationEvent {
    public CustomEvent(Object source) {
        super(source);
    }
    public String toString(){
        return "自定义事件";
    }
}

2、自定义事件处理器,实现ApplicationListener接口,关注自定义的CustomEvent事件

/**
 * 自定义事件处理器
 */
public class CustomEventHandler implements ApplicationListener<CustomEvent> {
    @Override
    public void onApplicationEvent(CustomEvent customEvent) {
        System.out.println("事件被处理了:"+customEvent.toString());
    }
}

3、定义事件处理器

/**
 * 事件发布器
 */
public class MyEventPublisher implements ApplicationEventPublisherAware {

    ApplicationEventPublisher applicationEventPublisher;
    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }
    public void publish(){
        CustomEvent customEvent = new CustomEvent("事件相关的数据");
        applicationEventPublisher.publishEvent(customEvent);
    }
}

4、发布事件

public class SpringMain {

    public static void main(String[] args) {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        MyEventPublisher publisher = context.getBean(MyEventPublisher.class);//构造发布器
        publisher.publish();//发布事件
    }
}

5、配置发布器、事件处理器

    <bean name="myEventPublisher" class="com.nuts.demo.spring.MyEventPublisher">
    </bean>
    <bean name="customEventHandler" class="com.nuts.demo.spring.CustomEventHandler"/>

猜你喜欢

转载自www.cnblogs.com/aligege/p/10655569.html