类似spring Aop的Proxy封装

  • H5_442229
    了解作者
  • 8.6KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-02 07:07
    上传日期
有一天在用回调模版的时候,忽然间又想到jdk自带的Proxy类似乎不是怎么好用,为何不把其做成回调模版呢,可以将其改造称类似spring Aop 代码如下: package com.fjx.proxy.up.test; import com.fjx.proxy.up.MethodInterceptor; import com.fjx.proxy.up.MethodInvocation; import com.fjx.proxy.up.ProxyUp; /** * 动态代理升级类测试 * @author FANGJINXIN * */ public class ProxyUpTest { public static void main(String[] args) { UserMgr userMgr = new UserMgrImpl(); Object proxy = ProxyUp.newProxy(userMgr, new MethodInterceptor(){ public void invoke(MethodInvocation invocation) { if(invocation.getMethod().getName().equals("saveUser")){ System.out.println("开始记录保存日志"); invocation.process(); System.out.println("保存成功日志记录完毕"); }else{ invocation.process(); } }}); userMgr = (UserMgr)proxy; userMgr.saveUser("湘"); userMgr.sayHello("湘"); } } 这样,在使用的时候只要实现其MethodInterceptor接口即可。省去了去实现jdk的InvocationHandler,而且用户只关心对方法进行怎样的处理.
proxyup.rar
内容介绍
package com.fjx.proxy.up; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 方法回调类 * @author FANGJINXIN * */ public class MethodInvocation implements InvocationHandler{ private Object target;//目标类 private Method method;//回调的方法 private Object[] args;//方法参数 private MethodInterceptor methodInterceptor;//方法拦截对象 public MethodInvocation(Object target, MethodInterceptor methodInterceptor){ this.target = target; this.methodInterceptor = methodInterceptor; } public MethodInvocation() { } /** * 调用目标对象的原始方法 */ public void process(){ try { method.invoke(target, args); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } /** * 重写代理回调方法 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { this.method = method; this.args = args; methodInterceptor.invoke(this);//调用方法拦截器代理方法 return proxy; } public Object getTarget() { return target; } public void setTarget(Object target) { this.target = target; } public Method getMethod() { return method; } public void setMethod(Method method) { this.method = method; } public MethodInterceptor getMethodInterceptor() { return methodInterceptor; } }
评论
    相关推荐
    • SpringIOC,DI+dynamic proxy 实现盗版AOP
      SpringIOC,DI+dynamic proxy 实现盗版AOP的源代码
    • Spring_0300_JDKProxy
      简单的动态代理实现代码!文档参考博文Spring学习(3)AOP初步—JDK动态代理
    • spring proxy代理模仿
      spring proxy代理模仿 提练出来了
    • Spring事务配置
      Spring烦人配置文件中的事务配置.包括编程方法和声明式事务的三种方法(注解,acpectJ,transactionProxyFactoryBean)
    • Spring示例_Printer_Spring_AOP_Spring_Proxy
      Spring示例_Printer_Spring_AOP_Spring_Proxy
    • spring_dynamic_proxy:基于接口基于子类的动态代理
      spring_dynamic_proxy:基于接口基于子类的动态代理
    • Spring
      --这里是自定义的拦截器的实现,在Spring的ProxyFactoryBean类中必须 指定interceptorNames的值 --> class="org.nitpro.aop.TransactionInterceptor"> <!--bizImpl为我们自己的业务处理实现 --> ...
    • first Spring test
      1.实现特定功能的方面代码在aop中又称为“通知(Advice)”包含 前置通知 后置通知 环绕...2.spring 采用代理的方式将通知织入到原bean中,将原bean和通知都封装到--org.springframework.aop.framework.ProxyFactory.
    • spring源码详解
      一、什么是AOP 二、AOP相关概念 (1)切面 (Aspect) 交叉业务,也就是通用的业务逻辑,比如日志、事务。 (2)通知(Advice) 切面的具体实现 (3)连接点 (Jointpoint) ... Spring AOP:3
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档