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

Posted 穆晟铭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
	}	
	
	
}

  

//事件监听器

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之间通信提供了支持的主要内容,如果未能解决你的问题,请参考以下文章

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

spring-boot -配置文件值注入

spring-boot -配置文件值注入

Spring Boot使用ServletFilter或Listener的方式

Spring Boot集成Quartz注入Spring管理的类

外置 tomcat启动Spring Boot程序模式下解决过滤器注入bean的空指针问题