美文网首页
4.利用JDK提供的动态代理来代理接口

4.利用JDK提供的动态代理来代理接口

作者: 小竹猫 | 来源:发表于2018-12-22 18:47 被阅读0次

创建代理类

//JDK 提供的动态代理 ,只能代理接口 ,不能代理类 。cglib 能代理类 。
public class DynamicProxy implements InvocationHandler{

    //声明一个对象 ,这个对象 就是用来表示 被代理类 。
    private Object obj;
    //传入被代理对象 。
    public Object getProxy(Object obj){
        this.obj = obj;
        //生成代理对象 。
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
    }
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // TODO Auto-generated method stub
        check();
        beforeLogging();
        Object returnValue = method.invoke(obj, args);
        afterLoggging();
        return returnValue;
    }

    public void beforeLogging(){
        System.out.println("事前日志 。");
    }
    public void afterLoggging(){
        System.out.println("事后日志。");
    }
    public void check(){
        System.out.println("安全检查。");
    }
    
}

obj.getClass().getClassLoader():拿到对象所有的加载器
obj.getClass().getInterfaces():拿到对象所有的构造器

定义两个接口,并为其创建实体类

public class PanMeiNv implements MeiNv {

    @Override
    public void play() {
        // TODO Auto-generated method stub
        System.out.println("和潘美女玩 。。。");
    }

}
@Override
    public void mai() {
        // TODO Auto-generated method stub
        System.out.println("上海的房子要卖。2亿。");
    }

定义一个主方法

public static void main(String[] args) {
        //创建被代理对象
        //PanMeiNv pan = new PanMeiNv();
        //创建代理类.
        /*DynamicProxy dp = new DynamicProxy();
         *通过getProxy方法拿到代理对象.
         *object proxy = dp.getProxy(pan);
         *把代理对象强转成美女类型.
         *MeiNv mv = (MeiNv)proxy;
         *mv.play();
         * 
         * */
        
        //流程痕迹
        
        //创建被代理对象
        ShangHaiFang sh = new ShangHaiFang();
        DynamicProxy dp = new DynamicProxy();
        Object proxy = dp.getProxy(sh);
        Fang f = (Fang) proxy;
        f.mai();
    }
}

输出结果:

安全检查。
事前日志 。
上海的房子要卖。2亿。
事后日志。

相关文章

  • 动态代理

    Jdk 动态代理 Jdk动态代理,利用反射,实现 InvocationHandler 接口。Jdk 动态代理需要实...

  • 4.利用JDK提供的动态代理来代理接口

    创建代理类 obj.getClass().getClassLoader():拿到对象所有的加载器obj.getCl...

  • Java动态代理 CGLib 与 JDK Proxy

    JDK动态代理 动态代理区别于静态代理,代理类在运行时生成。JDK 提供InvocationHandler接口和P...

  • JDK动态代理和CGLIB动态代理的区别

    Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理: JDK动态代理只提供接口的代...

  • 代理模式

    1、JDK动态代理: JDK动态代理是实现InvocationHandler接口,然后利用反射新建一个原始类的代理...

  • 动态代理-jdk代理实现原理

    动态代理-jdk代理实现原理 JDK中提供了一个Proxy类用于实现动态代理,JDK的动态代理是基于接口实现的,被...

  • Spring Aop

    Spring AOP: 它基于动态代理来实现。默认地,如果使用接口的,用 JDK 提供的动态代理实现,如果没有接口...

  • Java 动态代理

    前言 关于动态代理 JDK动态代理 CGLIB动态代理 区别 java动态代理是利用反射机制生成一个实现代理接口的...

  • spring aop

    JDK动态代理和CGLib代理 JDK的代理代理类 被代理接口 被代理实现类 启动类: jdk的动态代理是针对接口...

  • java面试宝典 五分钟了解spring代理 @Transact

    spring代理分为jdk动态代理和cglib代理 jdk动态代理 jdk动态代理是利用反射机制生成一个实现代理接...

网友评论

      本文标题:4.利用JDK提供的动态代理来代理接口

      本文链接:https://www.haomeiwen.com/subject/ncqvkqtx.html