spring 中的事件

Spring的事件(Application Event)为bean与bean之间的消息传递提供了支持。当一个bean处理完一个任务后,希望另一个bean知道并做后续的处理,这时我们需要让另一个bean监听当前bean所发送的事件。

spring的事件需要遵循如下步骤:

1:自定义事件,继承ApplicationEvent。

2:定义事件监听器,实现ApplicationListener。

3:利用容器发布事件。

给个示例代码:

1、自定义和事件

package com.example.demo.event;

import java.io.Serializable;

import org.springframework.context.ApplicationEvent;

public class EventSource extends ApplicationEvent implements Serializable{
     //事件源
	private static final long serialVersionUID = -5947023832545595712L;

	private String mess;
	public EventSource(Object source,String mess) {
		super(source);
		this.mess=mess;
	}
	public String getMess() {
		return mess;
	}
	public void setMess(String mess) {
		this.mess = mess;
	}
}

2、事件监听器

package com.example.demo.event;

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component 
public class Listener implements ApplicationListener { //事件监听器
   
	@Override
	public void onApplicationEvent(EventSource event) {
		String mess=event.getMess();
        System.out.println("。。。。接收到了消息。。。。。。"+mess);
	}

}

3、事件发布类

package com.example.demo.event;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class Publisher {//发布者
    
	@Autowired
	private ApplicationContext applicationContext;
	
	public void publish(String mess) {
		this.applicationContext.publishEvent(new EventSource(this, mess));
	}
}

4、配置类

package com.example.demo.event;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.example.demo.event")
public class EventConfig {

}

5、启动类

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.example.demo.event.EventConfig;
import com.example.demo.event.Publisher;

@SpringBootApplication
public class EventDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(EventDemoApplication.class, args);
		AnnotationConfigApplicationContext ctx=
				new AnnotationConfigApplicationContext(EventConfig.class);
		Publisher publisher=ctx.getBean(Publisher.class);
		publisher.publish("测试消息传递");
		ctx.close();
	}

}

 

你可能感兴趣的:(java)