容器+AOP实现动态部署(四)

   上篇咱们介绍了容器和AOP的结合,结合后怎样将对象增强服务并没有过多的说明,这里将详细说明怎样将对象 进行增强 ,达到一个一对多多对多的增强方式

先从简单的方式说起

/**
*JDK代理类,实现动态调用对象方法
*/
public class JDKDynamicProxy implements InvocationHandler {  /***……省略方法*//***回调使用方法,运行选择的方法*/ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  before();  Object result = method.invoke(target, args);  after();  return result;  }  private void before() {  System.out.println("Before");  }  private void after() {  System.out.println("After");  }  }

以上代码转为图形为

 

我们将详细的颗粒固定在 AOP中。这样一来,若再想添加服务颗粒可得修改代码,这不是一种非常好的解决方案。为了更好更好的将服务与AOP解耦,我们将服务咱们装载到了一个服务容器中。

这样就有了先前的版本号

 

 

基本是我们须要的。通过截取业务颗粒。将服务颗粒,关系集合一起传递到AOP中,AOP进行解析。若是有多个服务颗粒呢,于是我们有了变更版本号



将右側的服务颗粒放在了一个容器中,多个服务颗粒同一时候为一个业务对象服务。

若有多个服务颗粒,想要这写服务同一时候为全部业务颗粒提供支持,就成了例如以下图了

 

 1 首先通过构造函数将所须要的參数传递进来

	private Map<String, Object> aspectBeans; // 服务容器private Map<String, Object> businessBeans;// 业务容器private Map<String, Object> relationBeans;// 关系容器/**** * @param target*            被代理对象* @param aspectBeans*            切容器* @param businessBeans*            业务容器* @param relationBeans*            关系集合*/public JDKDynamicProxy(Object target, Map<String, Object> aspectBeans,Map<String, Object> businessBeans, Map<String, Object> relationBeans) {this.target = target;this.aspectBeans = aspectBeans;this.businessBeans = businessBeans;this.relationBeans = relationBeans;}


2  在回调函数中 调用解析关系xml方法。进行方法调用

 

	// 回调注冊切入对象方法@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {List beforeList = (List) relationBeans.get("aspectbefore");// 获取关系容器中的关系invokeAspectName(beforeList, method, args);// 调用切面类中匹配方法Object result = method.invoke(target, args);// 调用 被代理类本身方法return result;}/*** * @Title: getAllMethod * @Description:  运行某个服务类中的全部方法,* @param @param clazz 服务类* @param @param aspectClass	aop关系集合中设定运行 拦截的方法* @param @param args 被拦截对象的參数* @return void    返回类型 * @throws*/public void getAllMethod(Class clazz, String aspectClass, Object[] args)throws IllegalAccessException, IllegalArgumentException,InvocationTargetException, NoSuchMethodException, SecurityException {// 获取服务类中的全部公共方法Method[] methods = clazz.getDeclaredMethods();for (int j = 0; j < methods.length; j++) {// 反射获取服务类中每一个方法名称,获取该服务类方法Method jinectmethod = clazz.getMethod(methods[j].getName(), Object.class);// 反射调用服务类中方法jinectmethod.invoke(aspectBeans.get(aspectClass),args == null ? new Object[1] : args);}}

 

 小结:

  以上就是对AOP关系的基本解释,一步步逐渐演变,也不是一蹴而就的。所以回到学习上,也不是一次学习就能够全然的,要不断重复的思考和总结。详细的源代码点击连接

转载于:https://www.cnblogs.com/blfshiye/p/5383295.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解卷积层,全连接层的作用意义

有部分内容是转载的知乎的&#xff0c;如有侵权&#xff0c;请告知&#xff0c;删除便是&#xff0c;但由于是总结的&#xff0c;所以不一一列出原作者是who。 再次感谢&#xff0c;也希望给其他小白受益。 首先说明&#xff1a;可以不用全连接层的。 理解1&#xff1a; 卷…

用ionic快速开发hybird App(已附源码,在下面+总结见解)

用ionic快速开发hybird App&#xff08;已附源码,在下面总结见解&#xff09; 1.ionic简介 ionic 是用于敏捷开发APP的解决方案。核心思路是&#xff1a;利用成熟的前端开发技术&#xff0c;来写UI和业务逻辑。也就是说&#xff0c;就是一个H5网站&#xff0c;这个区别于react-…

40 个重要的 HTML5 面试问题及答案

2019独角兽企业重金招聘Python工程师标准>>> 介绍 我是一个ASP.NET MVC开发人员。最近当我找工作的时候&#xff0c;我发现很多问题都是围绕HTML 5和它的新功能展开的。所以&#xff0c;下面我将列出40个有助于你提高相关HTML 5知识的重要问题。 这些问题并不能保证…

利用光学流跟踪关键点---30

原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 关键点&#xff1a;是多个方向上亮度变化强的区域。 opencv:版本是2.4. 光学流函数&#xff1a;calcOpticalFlowPyrLK()。&#xff08;关键点侦测器使用goodFeaturesToTrack()&#xff09;二者结合。 相应的启动文…

register_globals(全局变量注册开关)

register_globals&#xff0c;是php.ini文件里面的一个配置选项&#xff0c;接下来&#xff0c;我们可以通过例程来分析一下&#xff0c;当register_globals on 与 register_globals off 的时候&#xff0c;对php语言的一些安全影响。测试源代码如下&#xff1a;index.html 源…

精述IBM的MQTT协议和MQTT-S协议

一&#xff0e;MQTT简介 MQTT (Message Queuing Telemetry Transport) 是由IBM研发的构建在TCP/IP之上的简单轻量的消息协议&#xff0c;目标使用场景为受限制环境&#xff0c;如低带宽、高延迟、不可靠网络&#xff0c;很适用于M2M和IoT中。它的竞争协议包括XMPP协议和IETF的C…

20150103--SQL连接查询+视图-02

20150103--SQL连接查询视图-02 子查询 一条查询语句出现在另外一条查询语句的内部&#xff0c;这条语句就被称之为子查询语句。 子查询分类 子查询可以根据子查询返回的结果以及子查询出现的位置两种方式进行分类 按结果分类&#xff1a; 标量子查询&#xff1a;子查询返回的结…

QtQuick controls和controls2 自定义样式

2019独角兽企业重金招聘Python工程师标准>>> controls import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4Rectangle {color: "green"Button {id:buttontext: qsTr("Second page")anchors.centerIn: parentpr…

电脑开机3秒就重启循环_电脑修好后客户不愿支付上门费,行,那电脑开机60秒自动关机吧!...

上门维修电脑已经非常普及了&#xff0c;上门维修电脑费用要比送修(送到维修店)费用高&#xff0c;送修电脑只有一项维修费用&#xff0c;上门维修电脑比送修多了一项费用&#xff0c;这项费用就是上门费。有人说维修电脑收取上门费用不合理&#xff0c;其实这样的说法非常自私…

jQuery属性筛选选择器

2019独角兽企业重金招聘Python工程师标准>>> 代码一 <h2>属性筛选选择器</h2><h3>[attval]、[att]、[att|val]、[att~val]</h3><div class"left" testattr"true" ><div class"div" testattr"t…

java 代码优化

Java程序中的内存管理机制是通过GC完成的&#xff0c;“一个对象创建后被放置在JVM的堆内存中&#xff0c;当永远不在应用这个对象的时候将会被JVM在堆内存中回收。被创建的对象不能再生&#xff0c;同时也没有办法通过程序语句释放”&#xff08;这个是《Java的GC机制》中提到…

MATLAB 长度和像素_Matlab中短时傅里叶变换 spectrogram和stft的用法

在Matlab中&#xff0c;做短时傅里叶变换需要使用函数spectrogram&#xff0c;而在Matlab2019中&#xff0c;引入了一个新的函数stft&#xff0c;下面我们就来看下这两个函数都如何使用。短时傅里叶变换的基本原理就是将数据分段加窗&#xff0c;做fft&#xff0c;在分段时会有…

图像处理基础——灰度共生矩阵

标准定义如下&#xff1a;对于取定的方向θ 和距离 d, 在方向为θ的直线上, 一个像元灰度为 i, 另一个与其相距为 d 像元的灰度为 j 的点对出现的频数即为灰度共生矩阵第(i, j)阵元的值。 怎样理解呢&#xff1f;看起来好复杂呀 呜呜呜 小白理解&#xff1a;灰度共生矩阵就…

iphone查看删除的短信_iPhone12发布!刚买的苹果手机短信全部消失了怎么办?

原标题&#xff1a;iPhone12发布&#xff01;刚买的苹果手机短信全部消失了怎么办&#xff1f;目前&#xff0c;人们的社交除了面对面交谈&#xff0c;用的最多的就是通过手机进行聊天&#xff0c;比如用QQ、微信和短信、邮件等方式&#xff0c;虽然短信不会用来一般的聊天&…

python基础之01数据类型-变量-运算浅解

python的数据类型 1 数字 数字分为整型&#xff08;int&#xff09;&#xff0c;长整型&#xff08;long&#xff09;&#xff0c;浮点型&#xff08;float&#xff09;&#xff0c;复数&#xff08;complex&#xff09; 整型较为常用的功能&#xff1a; >>> a-4 >…

使用Caffe进行手写数字识别执行流程解析

之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples实现对手写数字进行识别&#xff0c;这里详细介绍下其执行流程并精简了实现代码&#xff0c;使用Caffe对MNIST数据集进行train的文章可以参考 http://blog.csdn.net/fengbingchun/…

obs可以装手机吗?_原神PC和手机数据互通吗 PC和手机可以一起玩吗

在原神中&#xff0c;很多玩家都在PC端创建了角色&#xff0c;那么疑问来了&#xff0c;PC端与手机端的账号会是互通的吗&#xff1f;下面小编就为大家带来原神PC和手机数据互通吗的相关内容&#xff0c;一起来看看吧&#xff01;更多攻略&#xff1a;原神攻略大全PC和手机数据…

三维点云目标提取总结(续)

三维点云目标提取&#xff08;续&#xff09; 3.三维点云目标提取 3.1一般流程 先根据个人认识总结一下目标提取的一般性步骤&#xff1a; 如上所示&#xff0c;三维点云的目标提取关键性的两步即为&#xff1a;特征提取与选择、分类&#xff0c;是不是整个方法流程与图像中的目…

安卓高手之路之java层Binder

很多人一提到Binder就说代理模式&#xff0c;人云亦云的多&#xff0c;能理解精髓的少。 本篇文章就从设计角度分析一下java层BInder的设计目标&#xff0c;以及设计思路&#xff0c;设计缺陷&#xff0c;从而驾驭它。 对于【邦德儿】的理解, 从通信的角度来看&#xff0c;就是…