/**
* Application Event
* Application Event为Bean与Bean之间的消息通信提供了支持。当一个Bean处理完一个任务后,希望另外一个
* Bean知道并能做出相应的处理。(另外一个bean监听当前bean所发生的事件)
* @author Hiiso
*
*/
1.自定义事件类型,继承ApplicationEvent
package com.zh.ch2.event;
import org.springframework.context.ApplicationEvent;
/**
* 1.自定义事件类型,继承ApplicationEvent
* @author Hiiso
*/
public class DemoEvent extends ApplicationEvent {
private static final long serialVersionUID = 1L;
private String msg;
public DemoEvent(Object source, String msg) {
super(source);
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2.通过注入spring上下文applicationContext,发布信息
package com.zh.ch2.event;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
/**
* 2.通过注入spring上下文applicationContext,发布信息
*/
@Component
public class DemoPublisher {
@Autowired
ApplicationContext applicationContext;//1注入spring上下文,用来发布事件
public void publish(String msg){
applicationContext.publishEvent(new DemoEvent(this, msg));//2.发布事件
}
}
3.事件监听①实现ApplicationListener,并指定监听类型DemoEvent
package com.zh.ch2.event;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* 3.事件监听
* ①实现ApplicationListener,并指定监听类型DemoEvent
* @author Hiiso
*
*/
@Component
public class DemoListener implements ApplicationListener<DemoEvent> {//1
public void onApplicationEvent(DemoEvent event) {
String msg = event.getMsg();
System.out.println("我(bean-demoListener)接收到了-demo-Publisher:" + msg);
}
}
4.bean注入
package com.zh.ch2.event;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.zh.ch2.event")//注解方式扫描bean
public class EventConfig {
}
测试:
package com.zh.ch2.event;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Application Event
* Application Event为Bean与Bean之间的消息通信提供了支持。当一个Bean处理完一个任务后,希望另外一个
* Bean知道并能做出相应的处理。(另外一个bean监听当前bean所发生的事件)
* @author Hiiso
*
*/
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
DemoPublisher demoPublisher = context.getBean(DemoPublisher.class);
demoPublisher.publish("hello application event");
context.close();
}
}
结果:我(bean-demoListener)接收到了-demo-Publisher:hello application event