spring 事件处理

19 篇文章 0 订阅

Java提供了事件机制,在使用spring的时候,我们可以把普通的java事件操作定义为bean集成到bean容器中,但还有一种更方便的方式,即使用spring已集成的事件支持。
在使用Spring的事件支持时,我们需要关注以下几个对象:
      1. ApplicationEvent:继承自EventObject,同时是spring的application中事件的父类,需要被自定义的事件继承。
      2. ApplicationListener:继承自EventListener,spring的application中的监听器必须实现的接口,需要被自定义的监听器实现其onApplicationEvent方法

      3.Spring中提供一些Aware相关的接口,BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,其中最常用到的是ApplicationContextAware。实现ApplicationContextAware的Bean,在Bean被初始后,将会被注入ApplicationContext的实例。ApplicationContextAware提供了publishEvent()方法,实现Observer(观察者)设计模式的事件传播机,提供了针对Bean的事件传播功能。通过Application.publishEvent方法,我们可以将事件通知系统内所有的ApplicationListener。

 

1.继承ApplicationEvent

public class AnimalSpeakEvent extends ApplicationEvent{
	private static final long serialVersionUID = 1L;

	private String animalName;
	
	public String getAnimalName() {
		return animalName;
	}

	public AnimalSpeakEvent(Object source) {
		super(source);
	}
	 public AnimalSpeakEvent(Object source,String animalName) {
		super(source);
		this.animalName = animalName;
	}
}


 

2.定义监听类,实现ApplicationListener接口

@Service
public class AnimalEventListener implements ApplicationListener {

	public void onApplicationEvent(ApplicationEvent event) {
		if (event instanceof AnimalSpeakEvent) {
			  AnimalSpeakEvent a = (AnimalSpeakEvent) event;
			  System.out.println("事件监听器" + this.getClass().getSimpleName()+":有一个动物在讲话!它的名字是:"+ a.getAnimalName());
		}
	}

}


 

3. 发布事件,Bean类调用容器的方法发布事件。
    a、继承后处理Bean接口ApplicationContextAware,实现setApplicationContext。
    b、调用传入的ApplicationContext的publishEvent方法发布事件。

@Service("animal")
public class Animal implements ApplicationContextAware {
	private ApplicationContext ac;
	private String name;
	private int age;
	public void setApplicationContext(ApplicationContext arg0)
			throws BeansException {
		this.ac=arg0;
	}
	public String speak(){
		ac.publishEvent(new AnimalSpeakEvent(this,this.name));
		 return " 我的名字是;"+this.name+",我的年龄是:"+this.age;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		this.age = age;
	}
}


4.配置

<bean id="animal" class="com.mvc.event.Animal">
    	    <property name="name" value="老虎" />
 	       <property name="age" value="5" />
 	     </bean>


 

5.使用事件

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
		//事件处理
		Animal animal=(Animal)applicationContext.getBean("animal");
		animal.speak();//方法一
		applicationContext.publishEvent(new AnimalSpeakEvent(AnimalSpeakEvent.class,"青龙"));//方法二


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值