博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring boot: 一般注入说明(五) @Component, application event事件为Bean与Bean之间通信提供了支持...
阅读量:6608 次
发布时间:2019-06-24

本文共 2546 字,大约阅读时间需要 8 分钟。

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容器中,相当于配置文件中的
//@service注入:当前类是spring管理的一个bean@Componentpublic class DemoListener implements ApplicationListener
{ @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@Componentpublic 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

 

转载地址:http://fmiso.baihongyu.com/

你可能感兴趣的文章
Planner .NET日历日程控件能给你的应用程序提供多种日历日程功能
查看>>
我的友情链接
查看>>
Linux压力测试
查看>>
JAVA中的线程机制(二)
查看>>
nginx安装与配置2(转载)
查看>>
沈阳一饭店凌晨爆燃,燃气报警器时刻预防
查看>>
Redis 与 数据库处理数据的两种模式
查看>>
VUE2中axios的使用方法
查看>>
CS 229 notes Supervised Learning
查看>>
2018.10.27-dtoj-3996-Lesson5!(johnny)
查看>>
DataTable转换成json字符串
查看>>
ubuntu 12.04 安装 redis
查看>>
【DM642】ICELL Interface—Cells as Algorithm Containers
查看>>
svs 在创建的时候 上传文件夹 bin obj 这些不要提交
查看>>
Tinkphp
查看>>
How to temporally disable IDE tools (load manually)
查看>>
图片存储类型的种类、特点、区别
查看>>
MySQLs数据库建外键时自动跑到缩影处,真奇怪
查看>>
temporary Object and destructor
查看>>
xcode - 移动手势
查看>>