本文共 2463 字,大约阅读时间需要 8 分钟。
这里模拟一个短信发送器MessageSender,监听器MessageListener将发送的消息值打印出来。
package exa.ydoing.event;import org.springframework.context.ApplicationEvent;public class MessageEvent extends ApplicationEvent{ private static final long serialVersionUID = 1L; private String sms; public MessageEvent(Object source, String sms) { super(source); this.sms = sms; } public String getSms() { return sms; } public void setSms(String sms) { this.sms = sms; }}
package exa.ydoing.event;import org.springframework.context.ApplicationListener;public class MessageListener implements ApplicationListener{ @Override public void onApplicationEvent(MessageEvent event) { System.out.println("发送消息: " + event.getSms()); }}
需要实现ApplicationContextAware;这样发送器才能获得ApplicationContext的引用,而ApplicationContext接口扩展了ApplicationEventPublisher接口,发送器才能调用的ApplicationEventPublisher接口的publishEvent方法
package exa.ydoing.event;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.ApplicationEvent;public class MessageSender implements ApplicationContextAware{ private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public void sendMessage(String sms){ ApplicationEvent event = new MessageEvent(this.applicationContext, sms); //向监听器发送事件 applicationContext.publishEvent(event); }}
package exa.ydoing.event;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestApp { public static void main(String[] args){ ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml"); MessageSender sender = ctx.getBean("messageSender", MessageSender.class); sender.sendMessage("hello, world"); }}
只要Bean实现了ApplicationContextAware接口,Spring容器会自动注入当前的ApplicationContext实例:
发送消息: hello, message
转载地址:http://bxhrb.baihongyu.com/