药品和医疗器械网站icp备案前置审批流程,广州营销型网站制作,企业查询app排行榜,对于协会的新年祝贺语网站模板上篇咱们介绍了容器和AOP的结合#xff0c;结合后怎样将对象增强服务并没有过多的说明#xff0c;这里将详细说明怎样将对象 进行增强 #xff0c;达到一个一对多和多对多的增强方式 先从简单的方式说起 /**
*JDK代理类#xff0c;实现动态调用对象方法
*/
public class JD… 上篇咱们介绍了容器和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 MapString, Object aspectBeans; // 服务容器private MapString, Object businessBeans;// 业务容器private MapString, Object relationBeans;// 关系容器/**** * param target* 被代理对象* param aspectBeans* 切容器* param businessBeans* 业务容器* param relationBeans* 关系集合*/public JDKDynamicProxy(Object target, MapString, Object aspectBeans,MapString, Object businessBeans, MapString, 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