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<EventSource> { //事件监听器
   
	@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();
	}
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值