spring的事件机制主要成员有这两名大将
(1)ApplicationEvent:容器事件,由ApplicationContext发布
(2)ApplicationListener:监听器,可以由容器中的任何bean担任。
上代码!
事件类
package com.demo.impls;
import org.springframework.context.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;
}
}
监听类
package com.demo.impls;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
public class EmailNotifier implements ApplicationListener{
@Override
public void onApplicationEvent(ApplicationEvent evt) {
if(evt instanceof EmailEvent){
EmailEvent emailEvent = (EmailEvent)evt;
System.out.println("email address:" + emailEvent.getAddress());
System.out.println("email text:" + emailEvent.getText());
}else{
System.out.println("else event:" + evt);
}
}
}
beans.xml
<bean class="com.demo.impls.EmailNotifier"></bean>
Test测试
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.demo.impls.EmailEvent;
public class Test03 {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
EmailEvent evt = new EmailEvent("wu","wangjie@163.com","hello what");
ctx.publishEvent(evt);
}
}
最终结果
email address:wangjie@163.com
email text:hello what
else event:com.demo.impls.EmailEvent[source=wu]