ApplicationContext 提供了对bean事件传播的功能,通过publishEvent()方法可以通知系统内所有ApplicationListener。
//LoginAction.java----------ApplicationContextAware
package test3;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class LoginAction implements ApplicationContextAware{
private ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
this.applicationContext = applicationContext;
}
public int login(String username,String password) {
ActionEven actionEven = new ActionEven(username);
applicationContext.publishEvent(actionEven);
return 0;
}
}
//ActionEvent.java------------ApplicationEvent
package test3;
import org.springframework.context.ApplicationEvent;
public class ActionEven extends ApplicationEvent {
/**
*
*/
private static final long serialVersionUID = 1L;
public ActionEven(Object source) {
super(source);
// TODO Auto-generated constructor stub
}
}
//ActionListener.java-------------ApplicationListener
package test3;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
public class ActionListener implements ApplicationListener{
@Override
public void onApplicationEvent(ApplicationEvent arg0) {
// TODO Auto-generated method stub
if (arg0 instanceof ActionEven) {
System.out.println(arg0.toString());
}
}
}
//测试类
package test3;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class EventTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");
LoginAction ae = (LoginAction)ctx.getBean("loginAction");
ae.login("jenny", "4542525");
}
}
LoginAction的login方法激发ActionEvent事件,
由ApplicationContext的publishEvent事件传播,
ApplicationListener监听,然后判断是否是要处理的事件。