1. 程式人生 > >spring boot: 一般註入說明(五) @Component, application event事件為Bean與Bean之間通信提供了支持

spring boot: 一般註入說明(五) @Component, application event事件為Bean與Bean之間通信提供了支持

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之間通信提供了支持