博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java--02--动态代理
阅读量:4982 次
发布时间:2019-06-12

本文共 2451 字,大约阅读时间需要 8 分钟。

1 动态代理, 2     1)代理对象,不需要实现接口; 3     2)代理对象的生成,是利用JDK API, 动态的在内存中构建代理对象(需要我们指定创建 代理对象/目标对象 实现的接口的类型;); 4     3)  动态代理, JDK代理, 接口代理; 5  6 JDK中生成代理对象的API: 7 |-- Proxy 8     static Object newProxyInstance( 9 ClassLoader loader,       指定当前目标对象使用类加载器10  Class
[] interfaces, 目标对象实现的接口的类型11 InvocationHandler h 事件处理器12 ) 13 14 15 动态代理总结:16 代理对象不需要实现接口,但是目标对象一定要实现接口;否则不能用动态代理!17 (class $Proxy0 implements IuserDao)18 19 思考:20 有一个目标对象,想要功能扩展,但目标对象没有实现接口,怎样功能扩展?21 Class UserDao{}22 // 子类的方式23 Class subclass extends UserDao{}24 25 以子类的方式实现(cglib代理)
View Code
//邓紫棋服务菜单 : 唱歌,跳舞 interface IDengziqi {    void sing();    void dance();}
View Code

目标对象:

//目标对象 , 邓紫棋实实在在的在唱歌和跳舞public class DengziqiImpl implements IDengziqi {    @Override    public void sing() {        System.out.println("邓紫棋为你唱歌....");    }    @Override    public void dance() {        System.out.println("邓紫棋为你跳艳舞....");    }}
View Code

代理对象

//代理对象  精济人public class DengziqiProxy {    //邓紫棋来了.    private Object target;    public DengziqiProxy(Object target){        this.target = target;    }        public Object getDengziqiProxy(){ // 获得代理对象,也指向了接口.        return Proxy.newProxyInstance(target.getClass().getClassLoader(),                                    target.getClass().getInterfaces(),                                    new InvocationHandler() {                                        @Override                                        public Object invoke(Object proxy, Method method, Object[] args)                                                throws Throwable {                                            System.out.println("这家伙有钱...");                                            Object result = method.invoke(target, args);                                            System.out.println("大爷很满意");                                            return result;                                        }                                    });    }}
View Code

测试

// 测试类public class ProxyTests {    public static void main(String[] args) {        //1. 先目标对象        DengziqiImpl dengziqi = new DengziqiImpl(); //邓紫棋找来了                //2. 代理对象         IDengziqi p = (IDengziqi)new DengziqiProxy(dengziqi).getDengziqiProxy();        p.sing(); //审核条件达标者, 通过,让邓紫棋唱歌        p.dance();//审核条件达标者, 通过,让邓紫棋跳舞            }}
View Code

结果:

这家伙有钱...

邓紫棋为你唱歌....
大爷很满意

这家伙有钱...
邓紫棋为你跳艳舞....

大爷很满意

转载于:https://www.cnblogs.com/bravolove/p/8179881.html

你可能感兴趣的文章
关于ThreadLocal和一般的线程同步的详细解释
查看>>
HDFS源码分析心跳汇报之数据块汇报
查看>>
17Web服务器端控件
查看>>
es6-module
查看>>
(一)MapReduce篇之InputFormat,InputSplit,RecordReader(转)
查看>>
HTTP之Response状态码
查看>>
Mac如何使用git以及github
查看>>
mysql如何利用Navicat 导出和导入数据库
查看>>
Java正则表达式(一)、抓取网页email地址实例
查看>>
网络_01 基本配置
查看>>
【原创】关于oracle11G空表无法导出问题的解决方法
查看>>
16进制的简单运算
查看>>
速读《Javascript模式》(一)(简介、var的变量提升以及es6新规范的let)
查看>>
DM8168集成图像算法
查看>>
GDI编程小结
查看>>
nalply/crtmpserver
查看>>
jquery 遍历节点
查看>>
工具选择
查看>>
(转)C#实现RSA非对称加密解密
查看>>
迅为iTOP-4412开发板-Android4.4-固定MAC
查看>>