本文主要是介绍Spring的ApplicationEvent的监听事件的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
event,listener是observer模式一种体现,这里我们介绍ApplicationEvent的使用
1.建立Event
需要继承ApplicationEvent
public class NoticeAssignEvent extends ApplicationEvent {/*** 类别:* 无法受理* 无法完成* 审核*/private String type;private String agencyId;private String orderId;/*** 标题*/private String title;/*** 描述*/private String description;public NoticeAssignEvent(String type, String agencyId, String orderId, String title, String description) {super(orderId);this.type = type;this.agencyId = agencyId;this.orderId = orderId;this.title = title;this.description = description;}public String getType() {return type;}public String getAgencyId() {return agencyId;}public String getOrderId() {return orderId;}public String getTitle() {return title;}public String getDescription() {return description;}
}
2、建立listener
需要实现ApplicationListener 并重写onApplicationEvent方法
@Component
public class NoticeAssignListener implements ApplicationListener<NoticeAssignEvent> {private static final Logger logger = LoggerFactory.getLogger(NoticeAssignListener.class);@Overridepublic void onApplicationEvent(NoticeAssignEvent event) {//do something}
}pplicationListener带泛型,
如果泛型参数为BookingCreatedEvent,则表示只监听BookingCreatedEvent类型的事件,
如果泛型参数为ApplicationEvent ,则表示监听所有类型的事件。
另外可以用@Component来注册组件,这样就不需要在spring的配置文件中指定了.
3、新建一个工具类,实现ApplicationContextAware,用于引入ApplicationContext
ApplicationContextAware接口有什么用?
当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。
资源文件读取工具
@Component
public class SpringContextUtil implements ApplicationContextAware {private static ApplicationContext context = null;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {context = applicationContext;}public ApplicationContext getApplicationContext() {return context;}/*** 根据名称获取bean* @param beanName* @return*/public static <T> T getBean(String beanName) throws BeansException{if (context == null){return null;}return (T) context.getBean(beanName);}/*** 获取类型为requiredType的对象** @param clazz 需要获取的bean的类型* @return 该类型的一个在ioc容器中的bean* @throws BeansException 抛出spring异常*/public static <T> T getBean(Class<T> clazz) throws BeansException {return applicationContext.getBean(clazz);}/*** 如果ioc容器中包含一个与所给名称匹配的bean定义,则返回true否则返回false** @param name ioc容器中注册的bean名称* @return 存在返回true否则返回false*/public static boolean containsBean(String name) {return applicationContext.containsBean(name);}
}
4.触发event
NoticeAssignEvent noticeAssignEvent=new NoticeAssignEvent("type","agencyId","orderId","title","description");springContextUtil.getApplicationContext().publishEvent(noticeAssignEvent);
这篇关于Spring的ApplicationEvent的监听事件的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!