Spring 系列教程
- Spring 框架介绍
- Spring 框架模块
- Spring开发环境搭建(Eclipse)
- 创建一个简单的Spring应用
- Spring 控制反转容器(Inversion of Control – IOC)
- 理解依赖注入(DI – Dependency Injection)
- Bean XML 配置(1)- 通过XML配置加载Bean
- Bean XML 配置(2)- Bean作用域与生命周期回调方法配置
- Bean XML 配置(3)- 依赖注入配置
- Bean XML 配置(4)- 自动装配
- Bean 注解(Annotation)配置(1)- 通过注解加载Bean
- Bean 注解(Annotation)配置(2)- Bean作用域与生命周期回调方法配置
- Bean 注解(Annotation)配置(3)- 依赖注入配置
- Bean Java配置
- Spring 面向切面编程(AOP)
- Spring 事件(1)- 内置事件
- Spring 事件(2)- 自定义事件
除了内置事件,Spring中也可以使用自定义事件。
怎样使用自定义事件:
- 创建事件类 - 扩展
ApplicationEvent
类,创建事件类。 - 创建发送类 - 发送类获取
ApplicationEventPublisher
实例发送事件。 - 创建监听类 - 实现
ApplicationListener
接口,创建监听类。
事件类
事件类用于存储事件数据。下面创建一个简单的事件类。
CustomEvent.java
import org.springframework.context.ApplicationEvent; public class CustomEvent extends ApplicationEvent { public CustomEvent(Object source, String message) { super(source); } public String toString() { return "我是自定义事件"; } }
发送类
发送类创建事件对象并发送。
要发送事件,这里介绍2种方法:
- 使用
@autowired
注解注入ApplicationEventPublisher
实例。
CustomEventPublisher.java
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; public class CustomEventPublisher { @Autowired private ApplicationEventPublisher publisher; public void publish() { CustomEvent event = new CustomEvent(this); publisher.publishEvent(event); } }
- 发送类实现
ApplicationEventPublisherAware
接口,获取ApplicationEventPublisher
实例。
CustomEventPublisher.java
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; public class CustomEventPublisher implements ApplicationEventPublisherAware { private ApplicationEventPublisher publisher; // 必须重写这个方法获取ApplicationEventPublisher public void setApplicationEventPublisher (ApplicationEventPublisher publisher){ this.publisher = publisher; } public void publish() { CustomEvent event = new CustomEvent(this); publisher.publishEvent(event); } }
如果发送类实现了ApplicationEventPublisherAware
接口,发送类必须声明为bean,Spring容器将其标识为事件发送者。
<bean id="customEventPublisher" class="CustomEventPublisher"/>
监听类
监听类监听事件。监听类必须实现ApplicationListener
接口,并且被定义为Bean以便Spring容器可以加载它。
beans.xml
<bean id="customEventHandler" class="CustomEventHandler"/>
CustomEventHandler.java
import org.springframework.context.ApplicationListener; public class CustomEventHandler implements ApplicationListener<CustomEvent> { public void onApplicationEvent(CustomEvent event) { System.out.println("收到事件:" + event.toString()); } }
运行
测试自定义事件。
Test.java
import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); CustomEventPublisher publisher = (CustomEventPublisher) context.getBean("customEventPublisher"); publisher.publish(); } }
来源:https://www.cnblogs.com/jinbuqi/p/10987732.html