首页 > 其他 > 详细

最简单的动态代理实例(spring基于接口代理的AOP原理)

时间:2014-03-11 14:37:53      阅读:453      评论:0      收藏:0      [点我收藏+]

JDK的动态代理是基于接口的

bubuko.com,布布扣 package com.open.aop; bubuko.com,布布扣 public interface BusinessInterface { bubuko.com,布布扣    public void processBusiness(); bubuko.com,布布扣}

目标对象

bubuko.com,布布扣package com.open.aop; bubuko.com,布布扣publicclass BusinessObject implements BusinessInterface { bubuko.com,布布扣    publicvoid processBusiness() { bubuko.com,布布扣        System.out.println("action"); bubuko.com,布布扣    } bubuko.com,布布扣} bubuko.com,布布扣

代理对象

bubuko.com,布布扣package com.open.aop; bubuko.com,布布扣import java.lang.reflect.InvocationHandler; bubuko.com,布布扣import java.lang.reflect.Method; bubuko.com,布布扣import java.lang.reflect.Proxy; bubuko.com,布布扣publicclass LogHandler implements InvocationHandler { bubuko.com,布布扣    private Object delegate; bubuko.com,布布扣    public Object binder(Object delegate) { bubuko.com,布布扣        this.delegate=delegate; bubuko.com,布布扣        return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), bubuko.com,布布扣                delegate.getClass().getInterfaces(),this); bubuko.com,布布扣    } bubuko.com,布布扣    public Object invoke(Object proxy, Method method, Object[] args) bubuko.com,布布扣            throws Throwable { bubuko.com,布布扣        Object obj =null; bubuko.com,布布扣        System.out.println("对象方法调用前"); bubuko.com,布布扣        try{ bubuko.com,布布扣            obj = method.invoke(delegate, args); bubuko.com,布布扣        }catch (Exception e) { bubuko.com,布布扣        } bubuko.com,布布扣        System.out.println("对象方法调用后"); bubuko.com,布布扣        return obj; bubuko.com,布布扣    } bubuko.com,布布扣}

测试类

bubuko.com,布布扣package com.open.aop; bubuko.com,布布扣import java.lang.reflect.InvocationHandler; bubuko.com,布布扣import java.lang.reflect.Proxy; bubuko.com,布布扣publicclass Test { bubuko.com,布布扣    publicstaticvoid main(String[] args) { bubuko.com,布布扣        BusinessInterface bi = (BusinessInterface) new LogHandler() bubuko.com,布布扣                .binder(new BusinessObject()); bubuko.com,布布扣        bi.processBusiness(); bubuko.com,布布扣    } bubuko.com,布布扣}

输出结果

bubuko.com,布布扣对象方法调用前 bubuko.com,布布扣action bubuko.com,布布扣对象方法调用后

最简单的动态代理实例(spring基于接口代理的AOP原理),布布扣,bubuko.com

最简单的动态代理实例(spring基于接口代理的AOP原理)

原文:http://www.cnblogs.com/shaohz2014/p/3582151.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!