Spring中提供
![](/icons/41242yi.gif)
些Aware相关
![](/icons/41242de.gif)
接口
![](/icons/41242dou.gif)
BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等
![](/icons/41242dou.gif)
其中最常用到
![](/icons/41242de.gif)
是ApplicationContextAware
![](/icons/41242dou2.gif)
实现ApplicationContextAware
![](/icons/41242de.gif)
Bean
![](/icons/41242dou.gif)
在Bean被
![](/icons/41242chushi.gif)
后
![](/icons/41242dou.gif)
将会被注入 ApplicationContext
![](/icons/41242de.gif)
例子
![](/icons/41242dou2.gif)
ApplicationContextAware提供了publishEvent
![](/icons/41242kh.gif)
思路方法
![](/icons/41242dou.gif)
实现Observer(观察者)设计模式
![](/icons/41242de.gif)
事件传播机
![](/icons/41242dou.gif)
提供了针对Bean
![](/icons/41242de.gif)
事件传播功能
![](/icons/41242dou2.gif)
通过Application.publishEvent思路方法
![](/icons/41242dou.gif)
我们可以将事件通知系统内所有
![](/icons/41242de.gif)
ApplicationListener
Spring事件处理
![](/icons/41242yi.gif)
般过程:
·定义Event类
![](/icons/41242dou.gif)
继承org.springframework.context.ApplicationEvent.
·编写发布事件类Publisher
![](/icons/41242dou.gif)
实现org.springframework.context.ApplicationContextAware接口.
·覆盖思路方法
![](/icons/41242set.gif)
ApplicationContext(ApplicationContext applicationContext)和发布思路方法publish(Object obj)
·定义时间监听类EventListener
![](/icons/41242dou.gif)
实现ApplicationListener接口
![](/icons/41242dou.gif)
实现思路方法onApplicationEvent(ApplicationEvent event).
java 代码
import org.springframework.context.ApplicationEvent;
/**
* 定义事件信息
* @author
*
*/
public
![](/icons/41242class.gif)
MessageEvent extends ApplicationEvent {
private String message;
public void
![](/icons/41242set.gif)
Message(String message){
this.message = message;
}
public String getMessage
![](/icons/41242kh.gif)
{
![](/icons/41242return.gif)
message;
}
public MessageEvent(Object source, String message) {
super(source);
this.message = message;
// TODO Auto-generated constructor stub
}
private
![](/icons/41242static.gif)
final long serialVersionUID = 1L;
}
java 代码
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.support.File
![](/icons/41242System.gif)
XmlApplicationContext;
public
![](/icons/41242class.gif)
Publisher implements ApplicationContextAware {
private ApplicationContext context;
@Override
public void
![](/icons/41242set.gif)
ApplicationContext(ApplicationContext arg0)
throws BeansException {
// TODO Auto-generated method stub
this.context = arg0;
}
public void publish(String message){
context.publishEvent(
![](/icons/41242new.gif)
MessageEvent(this,message));
}
public
![](/icons/41242static.gif)
void
![](/icons/41242main.gif)
(String
![](/icons/41242zhk2.gif)
args) {
ApplicationContext ctx =
![](/icons/41242new.gif)
File
![](/icons/41242System.gif)
XmlApplicationContext("src/applicationContext.xml");
Publisher pub = (Publisher) ctx.getBean("publisher");
pub.publish("Hello World!");
pub.publish("The quick brown fox jumped over the lazy dog");
}
}
java 代码
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
public
![](/icons/41242class.gif)
MessageEventListener implements ApplicationListener {
@Override
public void _disibledevent=>
![](/icons/41242System.gif)
.out.pr
![](/icons/41242int.gif)
ln("Received: " + msEvent.getMessage
![](/icons/41242kh.gif)
);
}
}
}
在运行期
![](/icons/41242dou.gif)
ApplicationContext会自动在当前
![](/icons/41242de.gif)
所有Bean中寻找ApplicationListener接口
![](/icons/41242de.gif)
实现
![](/icons/41242dou.gif)
并将其作为事件接收对象
![](/icons/41242dou2.gif)
当Application.publishEvent思路方法
![](/icons/41242diaoyong.gif)
时
![](/icons/41242dou.gif)
所有
![](/icons/41242de.gif)
ApplicationListener接口实现都会被激发
![](/icons/41242dou.gif)
每个ApplicationListener可根据事件
![](/icons/41242de.gif)
类型判断是否是自己需要处理
![](/icons/41242de.gif)
事件
![](/icons/41242dou.gif)
如上面
![](/icons/41242de.gif)
ActionListener只处理ActionEvent事件
延伸阅读
最新评论