zoukankan      html  css  js  c++  java
  • java 事件监听

    事件监听实现:

     三要素:

    1、事件源(数据源,要处理的数据)

    2、事件 (承载数据,传递信息并被监听)

    3、监听器 (负责对数据的业务处理)

    --该开发用例采用了Spring的事件监听

    1、  定义事件类型

    public class MyEvent extends ApplicationEvent {

        private static final long serialVersionUID = 7937618461275424515L;

        // 其他属性 (非必须)

        ... ...

        public MyEvent(Object source) {

            super(source);

        }

    }

    2、定义一个基础监听抽象类(一般处理一些公共的事情,非必须,推荐使用抽象类)

    public abstract class BaseApplicationListener implements ApplicationListener {

       

        private static Logger logger = Logger.getLogger(BaseApplicationListener.class);

        // 此抽象方法,需要实现类对监听到的事件的具体业务处理

        public abstract String process(ApplicationEvent event);

     

        public final void onApplicationEvent(ApplicationEvent event) {

           String message = process(event);

       // 记录日志

       logger.info(message);

           // 其他处理

           ... ...

        }

       

    }

    3、定义具体实现类

    public class MyListener extends BaseApplicationListener {

       

        @SuppressWarnings("unchecked")

        public String process(ApplicationEvent event) { // 实现对监听到的事件的具体业务处理

            String message = "";

            // 处理事件

            if(event!=null){

               // 判断事件类型

                if(event instanceof MyEvent){

                    // 一些具体业务处理

                   ... ...

                }

            }

            return message;

        }

    }

    其他service中需要发布事件方法代码:

     // data 就是要处理的业务数据对象

    ContextUtil.getApplicationContext().publishEvent(new MyEvent(data));

    工具类:

    public class ContextUtil implements ApplicationContextAware {

       

        private ContextUtil() {

            //nothing

        }

     

        private static ApplicationContext applicationContext; // Spring应用上下文环境

     

        /**

         * 实现ApplicationContextAware接口的回调方法,设置上下文环境

         *

         * @param applicationContext

         * @throws BeansException

         */

        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

            ContextUtil.applicationContext = applicationContext;

        }

     

        /**

         * @return ApplicationContext

         */

        public static ApplicationContext getApplicationContext() {

            return applicationContext;

        }

     

        /**

         * 获取对象

         *

         * @param name

         * @return Object 一个以所给名字注册的bean的实例

         * @throws BeansException

         */

        public static Object getBean(String name) throws BeansException {

            return applicationContext.getBean(name);

        }

     

        /**

         * 获取类型为requiredType的对象

         * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)

         *

         * @param name

         *            bean注册名

         * @param requiredType

         *            返回对象类型

         * @return Object 返回requiredType类型对象

         * @throws BeansException

         */

        public static Object getBean(String name, Class requiredType) throws BeansException {

            return applicationContext.getBean(name, requiredType);

        }

     

        /**

         * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true

         *

         * @param name

         * @return boolean

         */

        public static boolean containsBean(String name) {

            return applicationContext.containsBean(name);

        }

     

        /**

         * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。

         * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)

         *

         * @param name

         * @return boolean

         * @throws NoSuchBeanDefinitionException

         */

        public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {

            return applicationContext.isSingleton(name);

        }

     

        /**

         * @param name

         * @return Class 注册对象的类型

         * @throws NoSuchBeanDefinitionException

         */

        public static Class getType(String name) throws NoSuchBeanDefinitionException {

            return applicationContext.getType(name);

        }

     

        /**

         * 如果给定的bean名字在bean定义中有别名,则返回这些别名

         *

         * @param name

         * @return

         * @throws NoSuchBeanDefinitionException

         */

        public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {

            return applicationContext.getAliases(name);

        }

     

    }

  • 相关阅读:
    构建maven的web项目时注意的问题(出现Error configuring application listener of class org.springframework.web.context.ContextLoaderListener 或者前端控制器无法加载)
    c3p0私有属性checkoutTimeout设置成1000引发的调试错误:
    sql面试题(学生表_课程表_成绩表_教师表)
    传值与传址
    new String()理解
    hashcode的理解
    CentOs安装ssh服务
    openstack swift memcached
    openstack swift middleware开发
    java实现二叉树
  • 原文地址:https://www.cnblogs.com/xtreme/p/4272481.html
Copyright © 2011-2022 走看看