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"/>