监听器

spring 事件机制

久未见 提交于 2019-11-26 03:20:02
  在软件开发过程中,有时候我们会遇到需要把具体业务解耦出来,让各个模块只负责相应的处理逻辑.比如说,在我们的抽象业务逻辑中有一个负责开往目的地的司机driver,现在我们的业务系统中不仅要处理司机去往目的地的逻辑,也有其他业务模块需要关注司机具体的目的地是什么地方。然而司机只负责把乘客送到具体地方。不需要负责告诉业务他去哪里。这时候我们可以采用spring的事件机制,让业务解耦。 spring的事件机制包括: 事件源,对应具体的事件. 事件监听器,负责接收具体的事件源. 事件广播器, 负责发布事件源。   相应的处理逻辑为:事件监听器会注册具体的事件源,当事件广播器广播具体的事件源后,事件监听器能接到该事件的发布消息,然后处理相关事件。 事件源   定义事件源需要继承spring的ApplicationEvent类,该类有两子类ApplicationContextEvent,RequestHandledEvent.   ApplicationContextEvent有4个子类,ContextStartedEvent,ContextRefreshedEvent,ContextClosedEvent,ContextStoppedEvent,分别表示容器启动,刷新,关闭,停止的事件。   RequestHandledEvent只有定义了DispatcherServlet时才会产生该事件

Android学习_广播接收器

江枫思渺然 提交于 2019-11-26 02:09:04
一、广播 1.  标准广播和有序广播 标准广播:异步,发出消息,所有接收器同时接收。但无法被截断 有序广播:同步,同一时刻只有一个广播接收器接收。可截断消息。 2.  广播注册 代码中注册(动态注册)、AndroidManifest.xml中注册(静态注册) 1) 动态注册 动态注册更灵活,但是必须要在程序启动后才能接收广播。 Step1:新建一个继承BroadcastReceiver类的类(自定义类或者内部类),并重写onReceive方法(广播接收器接收到相应广播后,会自动调用onReceive()方法) Step2:创建IntentFilter并添加需要监听广播所对应的action值 Step4:用registerReceiver()注册监听器,将监听器和IntentFilter的实例作为两个参数传入(Context.registerReceiver()方法) Step3:重写所在activity的onDestory()方法,在onDestory()中用unregisterReceiver()取消注册监听器(动态注册广播接收器一定要取消注册) 注意: 如果程序需要进行一些对用户比较敏感的操作,必须在配置文件中声明权限 2) 静态注册 启动未程序时就能接收广播 2.  发送自定义广播 1) 发送标准广播 Intent intent = new Intent(“com

中间件增强框架之InterceptFramework

断了今生、忘了曾经 提交于 2019-11-25 22:18:11
一、前言 在智能运维中,应用服务所使用的组件及JAR包等相关信息非常重要,这些信息能够清晰地描绘一个应用服务的骨架,我们称这些信息为应用画像。在UAVStack中,中间件增强框架(MOF)下的InterceptFramework可以在应用启动过程中获取画像信息。本文主要介绍InterceptFramework的架构原理和在此基础上实现的应用画像数据采集与存储。 二、整体架构 2.1 关键技术 Javaassist Hook 2.2 关键类及功能 Profile数据和客户端监控指标主要通过InterceptSupport和hookProxy机制捕获和监控。 Profile也会安装至DataObserver对象并暴露JMX/HTTP接口。 2.3 拦截之前的准备 在应用启动的特定生命周期内改写字节码,植入特定的逻辑处理代码进行拦截。 拦截框架对应的Supporter启动,从配置文件中获取应该装载的Listener,构建InterceptSupport实例,把Listener添加到InterceptSupport实例中。 2.4 具体的拦截逻辑 在应用启动过程中的特定生命周期,之前植入的代码拦截逻辑开始执行InterceptSupport的doIntercept方法,遍历已注册的Listener监听器。每个监听器都继承自InterceptEventListener类