spring boot: 一般註入說明(五) @Component, application event事件為Bean與Bean之間通信提供了支持
阿新 • • 發佈:2017-12-26
listen source 監聽 監聽器 nbsp lis 所有 fin 配置
spring的事件,為Bean與Bean之間通信提供了支持,當一個Bean處理完成之後,希望另一個Bean知道後做相應的事情,這時我們就讓另外一個Bean監聽當前Bean所發送的事件。
spring的事件應該遵循:
1.自定義事件,集成:ApplicationEvent
2.自定義事件監聽,實現ApplicationListener
3.使用容器發布事件
//自定義事件
package ch2.event; import org.springframework.context.ApplicationEvent; //自定義事件 public class DemoEvent extends ApplicationEvent { private static final long serialVerisionUID = 1L; private String msg; public DemoEvent(Object source, String msg) { super(source); // TODO Auto-generated constructor stub this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
//事件監聽器
package ch2.event; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; //事件監聽器 //@Component把普通pojo實例化到spring容器中,相當於配置文件中的<bean id="" class=""/> //@service註入:當前類是spring管理的一個bean @Component public class DemoListener implements ApplicationListener<DemoEvent> { @Override public void onApplicationEvent(DemoEvent event) { // TODO Auto-generated method stub //接受消息 String msg = event.getMsg(); //打印消息 System.out.println("我(bean-DemoListener)接收到了bean-DemoPublisher發布的消息:"+msg); } }
//事件發送
package ch2.event; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; //事件發送 //把普通pojo實例化到spring容器中當成一個Bean @Component public class DemoPublisher { //將ApplicationContext類的實體Bean註入到DemoPublisher中,讓DemoPublisher擁有ApplicationContext的功能 //使用applicationContext來發布事件 @Autowired ApplicationContext applicationContext; public void publish(String msg) { //使用applicationContext的event來發布消息 applicationContext.publishEvent(new DemoEvent(this, msg)); } }
配置類
package ch2.event; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ComponentScan; //聲明本類是一個配置類 @Configuration //導入ch2.event包下的所有@Service,@Component,@Repository,@Controller註冊為Bean @ComponentScan("ch2.event") public class EventConfig { }
運行:
package ch2.event; import org.springframework.context.annotation.AnnotationConfigApplicationContext; 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)接收到了bean-DemoPublisher發布的消息:hello application event
spring boot: 一般註入說明(五) @Component, application event事件為Bean與Bean之間通信提供了支持