事件监听实现:

三要素:

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);

}

}

最新文章

  1. ActiveMQ(li)
  2. 关于项目中owl文件中的类定义和属性定义
  3. 常用COBOL函数
  4. group_concat函数详解
  5. ubuntu 13.04 tftp服务器建立
  6. Scss sass
  7. BigDecimal的equals
  8. C实现面向对象封装、继承、多态
  9. 2013国内IT行业薪资对照表【技术岗】
  10. Redis 的性能
  11. 戴建钊 201521123023《Java程序设计》第1周学习总结
  12. 【转】Awk 命令学习总结、AWk命令系列学习(linux shell)
  13. hdu2242 考研路茫茫——空调教室
  14. kindle 安卓 app下载的电子书放在什么文件夹?
  15. JavaScript几种常见的继承方法
  16. VS 2017 + opencv4.0
  17. log4j日志的使用
  18. 谈一谈Elasticsearch的集群部署
  19. href="javacript:;" href="javacript:void(0);" href="#"区别。。。
  20. URL分发(URLConf)

热门文章

  1. HTML5 Canvas ( 文字的度量 ) measureText
  2. Eclipse在线安装STS插件
  3. 某C电面记
  4. c++builder Delphi 直接使用剪贴板 Clipboard
  5. FireDACQuery FDQuery New
  6. hibernate-注解及配置
  7. ADO数据库编程入门
  8. JDK5并发(1) Locks-AQS
  9. invalid self-signed ssl certificate
  10. Null Hypothesis and Alternate Hypothesis