zoukankan      html  css  js  c++  java
  • Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法

    参照:https://blog.csdn.net/ilovejava_2010/article/details/7953419

    一。写一个事件类继承ApplicationEvent

      

     1 public class FdataEvent extends ApplicationEvent {
     2 
     3     /**
     4      * 
     5      */
     6     private static final long serialVersionUID = 7554563854171912686L;
     7     
     8     private Integer fid ;
     9     private Long time ;
    10     private Map<String,Object> datas;
    11     
    12     public FdataEvent(Object source,Integer fid,Long time,Map<String,Object> datas) {
    13         super(source);
    14         this.fid = fid;
    15         this.time = time;
    16         this.datas = datas;
    17     }
    18 
    19     public Integer getFid() {
    20         return fid;
    21     }
    22 
    23     public void setFid(Integer fid) {
    24         this.fid = fid;
    25     }
    26 
    27     public Long getTime() {
    28         return time;
    29     }
    30 
    31     public void setTime(Long time) {
    32         this.time = time;
    33     }
    34 
    35     public Map<String, Object> getDatas() {
    36         return datas;
    37     }
    38 
    39     public void setDatas(Map<String, Object> datas) {
    40         this.datas = datas;
    41     }
    42 
    43 }

    二。写一个监听类实现ApplicationListener中的onApplicationEvent方法

     1 @Component
     2 public class FdataEventListener implements ApplicationListener<FdataEvent> {
     3 
     4     @Override
     5     public void onApplicationEvent(FdataEvent event) {
     6         //写业务逻辑
     7 
     8     }
     9 
    10 }

    三。获取Spring引用上下环境ApplicationContext,通过ApplicationContext调用publishEvent方法

      1.通过main方法实现

      

    1 public class Test {
    2     public static void main(String[] args) {
    3         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    4         
    5 
    6         FdataEvent event = new FdataEvent(this, fid, timeStamp, param);
    7         context.publishEvent(event);
    8        
    9     }

      2.在service层中调用SpringContextUtil中的publishEvent方法。

      

     1 public class SpringContextUtil implements ApplicationContextAware {
     2     
     3     // Spring应用上下文环境  
     4     private static ApplicationContext applicationContext;  
     5      
     6     @Override
     7     public void setApplicationContext(ApplicationContext applicationContext) {  
     8         SpringContextUtil.applicationContext = applicationContext;  
     9     }  
    10      
    11     public static ApplicationContext getApplicationContext() {  
    12         return applicationContext;  
    13     }  
    14     /** 
    15      * 获取spring管理的bean
    16      *  
    17      * @param name 
    18      * @return T
    19      * @throws BeansException 
    20      */  
    21     @SuppressWarnings("unchecked")
    22     public static <T> T getBean(Class<T> clazz,String name) throws BeansException {  
    23         return (T)applicationContext.getBean(name);  
    24     }
    25     /**
    26      * 获取spring管理的bean
    27      * @param clazz
    28      * @return
    29      */
    30     public static <T> T getBean(Class<T> clazz) {
    31         String name = StringUtils.uncapitalize(clazz.getSimpleName());
    32         return getBean(clazz,name);
    33     }
    34     /**
    35      * 发布事件
    36      * @param event
    37      */
    38     public static void publishEvent(ApplicationEvent event) {
    39         applicationContext.publishEvent(event);
    40     }
    41     
    42 
    43 }
  • 相关阅读:
    野路子码农系列(7)近期花里胡哨技巧汇总
    野路子码农系列(6)有关线下验证集选取的思考
    野路子码农(5)Python中的装饰器,可能是最通俗的解说
    野路子码农(4)挖掘机云端部署小试
    野路子码农系列(3)plotly可视化的简单套路
    野路子码农系列(2)Python中的类,可能是最通俗的解说
    野路子码农系列(1) 创建Web API
    pandas技巧两则——列内元素统计和列内元素排序
    Windows环境下Anaconda安装TensorFlow的避坑指南
    让米帝领事馆给你报空气质量(动态网页爬取及简单的数据整理)
  • 原文地址:https://www.cnblogs.com/zcjyzh/p/9922374.html
Copyright © 2011-2022 走看看