spring boot: 一般注入说明 @Component, application event事件为Bean与Bean之间通信提供了支持

贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述spring boot: 一般注入说明 @Component, application event事件为Bean与Bean之间通信提供了支持相关的知识,希望能为你提供帮助。
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; } }

【spring boot: 一般注入说明 @Component, application event事件为Bean与Bean之间通信提供了支持】
//事件监听器
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
 

    推荐阅读