首页 > 代码库 > Spring---ApplicationContext的事件机制
Spring---ApplicationContext的事件机制
事件源:ApplicationContext。publishEvent()方法:用于主动触发容器事件。事件:ApplicationEvent类,容器事件,必须由ApplicationContext发布。事件监听器:ApplicationListener接口,可由容器中任何监听器Bean担任。onApplicationEvent(ApplicationEvent event):每当容器内发生任何事件时,此方法都被触发
容器事件类需继承ApplicationEvent类,容器事件的监听器类需实现ApplicationListener接口。
下面给出一个例子
1.首先定义一个EmailEvent类,继承ApplicationEvent类
public class EmailEvent extends ApplicationEvent { private String address; private String text; public EmailEvent(Object source) { super(source); } public EmailEvent(Object source, String address, String text) { super(source); this.address = address; this.text = text; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getText() { return text; } public void setText(String text) { this.text = text; }}
2,定义一个EmailNotifier类,实现ApplicationListener接口,并复写onApplicationEvent()方法
public class EmailNotifier implements ApplicationListener { @Override public void onApplicationEvent(ApplicationEvent applicationEvent) { if (applicationEvent instanceof EmailEvent){ EmailEvent emailEvent = (EmailEvent) applicationEvent; System.out.println("需要发送邮件的接收地址: " + emailEvent.getAddress()); System.out.println("需要发送邮件的邮件正文: " + emailEvent.getText()); }else { System.out.println("容器本身的事件: " + applicationEvent); } }}
3.将监听器配置在容器中
<bean class="org.spring.listener.EmailNotifier"/>
4.编写主程序main
public class SpringTest { public static void main(String[] args){ ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");// EmailEvent ele = new EmailEvent("hello","spring_test@163.com","this is a test");// ctx.publishEvent(ele); }}
程序到此结束,运行结果如下:
容器本身的事件: org.springframework.context.event.ContextRefreshedEvent[source=org.springframework.context.support.ClassPathXmlApplicationContext@b81eda8: startup date [Thu Dec 04 20:20:52 CST 2014]; root of context hierarchy]
若取消main中的注释,即,使用publishEvent()来触发事件,运行结果如下:
容器本身的事件: org.springframework.context.event.ContextRefreshedEvent[source=org.springframework.context.support.ClassPathXmlApplicationContext@b81eda8: startup date [Thu Dec 04 20:24:03 CST 2014]; root of context hierarchy]需要发送邮件的接收地址: spring_test@163.com需要发送邮件的邮件正文: this is a test
Spring---ApplicationContext的事件机制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。