现弄一个讨债接口

package cn.itcast.g_dongtaidaili;

public interface Taozhai {

    void taozhai();
}

再弄一个讨债实现类

package cn.itcast.g_dongtaidaili;

public class Taozhai_Impl implements Taozhai{

    @Override
public void taozhai() { System.out.println("把钱还给我~~~");
} }

讨债力度太弱,根本讨不回

所以请讨债公司代理讨债

package cn.itcast.g_dongtaidaili;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import org.junit.Test; public class CompanyProxyTaozhai implements Taozhai { Taozhai_Impl taozhai=new Taozhai_Impl(); @Override
public void taozhai() { Taozhai strong_taozhai = (Taozhai) Proxy.newProxyInstance(cn.itcast.g_dongtaidaili.Taozhai_Impl.class.getClassLoader(),
new Class[]{cn.itcast.g_dongtaidaili.Taozhai.class}, new InvocationHandler() { @Override
public Object invoke(Object obj, Method method, Object[] param) throws Throwable { System.out.println("讨债公司利用恐吓 威胁 暴力殴打 打砸等方式逼债");
method.invoke(taozhai, param);
System.out.println("讨债成功,讨债公司分取利益");
return null;
}
}); strong_taozhai.taozhai();
} }

与装饰者设计模式相同,代理讨债也实现了讨债接口,植入原始讨债对象反射出原始讨债方法并进行增强,返回增强的讨债对象.

实现类

package cn.itcast.g_dongtaidaili;

public class DemoTaozhai {

    public static void main(String[] args) {

        CompanyProxyTaozhai taozhai=new CompanyProxyTaozhai();
taozhai.taozhai();
} }

结果演示

new Class[]{cn.itcast.g_dongtaidaili.Taozhai.class} 第二个参数是接口数组也可以用taozhai.getClass().getInterfaces() 都是得到接口数组 ,为什么是数组,因为实现类可以实现多个接口

JDK 动态代理 讨债实例的更多相关文章

  1. SpringBoot27 JDK动态代理详解、获取指定的类类型、动态注册Bean、接口调用框架

    1 JDK动态代理详解 静态代理.JDK动态代理.Cglib动态代理的简单实现方式和区别请参见我的另外一篇博文. 1.1 JDK代理的基本步骤 >通过实现InvocationHandler接口来 ...

  2. 静态代理和jdk动态代理

    要说动态代理,必须先聊聊静态代理. 静态代理 假设现在项目经理有一个需求:在项目现有所有类的方法前后打印日志. 你如何在不修改已有代码的前提下,完成这个需求? 我首先想到的是静态代理.具体做法是: 1 ...

  3. JDK动态代理实例

    最近看<深入浅出MyBatis技术原理与实战>这本书时,里面讲到Mapper接口的内部实现是通过JDK动态代理生成实现类,联想到之前看<SPRING技术内幕>这本书里也常常提到 ...

  4. JDK动态代理

    一.基本概念 1.什么是代理? 在阐述JDK动态代理之前,我们很有必要先来弄明白代理的概念.代理这个词本身并不是计算机专用术语,它是生活中一个常用的概念.这里引用维基百科上的一句话对代理进行定义: A ...

  5. 静态代理和利用反射形成的动态代理(JDK动态代理)

    代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...

  6. Spring中的JDK动态代理

    Spring中的JDK动态代理 在JDK1.3以后提供了动态代理的技术,允许开发者在运行期创建接口的代理实例.在Sun刚推出动态代理时,还很难想象它有多大的实际用途,现在动态代理是实现AOP的绝好底层 ...

  7. Java中的JDK动态代理

    所谓代理,其实就是相当于一个中间人,当客户端需要服务端的服务时,不是客户直接去找服务,而是客户先去找代理,告诉代理需要什么服务,然后代理再去服务端找服务,最后将结果返回给客户. 在日常生活中,就拿买火 ...

  8. JDK动态代理与CGLib动态代理

    1.JDK动态代理 JDK1.3以后java提供了动态代理技术,允许开发者在运行期创建接口的代理实例,动态代理是实现AOP的绝好底层技术. JDK的动态代理主要涉及到java.lang.reflect ...

  9. java jdk动态代理

    在面试的时候面试题里有一道jdk的动态代理是原理,并给一个事例直接写代码出来,现在再整理一下 jdk动态代理主要是想动态在代码中增加一些功能,不影响现有代码,实现动态代理需要做如下几个操作 1.首先必 ...

随机推荐

  1. [转]如何在.NET MVC中使用jQuery并返回JSON数据

    本文转自:http://blog.sina.com.cn/s/blog_48e42dc90100xp1p.html 二.开始实践 - jQuery端 假设我们要从服务器端获取一个文章列表,并把文章条目 ...

  2. div拖动实现及优化

    工作中的一个项目ui界面比较传统(chou),就想着把前端重构一下.内容之一是把导航栏从上方固定高度改为了右侧伸缩的边栏,好处是边栏可伸缩,占用面积小.不完美的地方是有时候会遮挡页面上最右边的按钮,作 ...

  3. 如何解读IL代码

    如何解读IL代码 关于IL代码,我有将从三个方面去揭开它神秘的面纱.IL代码是什么?我们为什么要去读懂IL代码?我们如何去读懂IL代码?这三个问题的解答,将是我解读IL代码的整体思路. IL代码是什么 ...

  4. StreamReader类

    StreamReader类用于从文件中读取数据,该类是一个通用类,可用于任何流,构造方法和StreamWrite类格式一样的. 创建方式有两种: 1.先创建Filestream类在创建StreamRe ...

  5. js日期格式转化

    如果出现日期格式: /Date(1442742059253)/ 可用下面js方法转化 function ChangeDateFormat(cellval) {        var date = ne ...

  6. SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER

    [OLE DB 源 [2]] 错误: SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.对连接管理器“test.trade_sh ...

  7. centos yum 安装jdk后配置JAVA_HOME

    centos6.4 yum 安装jdk和JAVA_HOME的设置 2014-06-17 16:13 1176人阅读 评论(0) 收藏 举报  分类: linux(3)  版权声明:本文为博主原创文章, ...

  8. SublimeText插件eslint : 语法检测

    参考: http://www.tuicool.com/articles/faANRvj 安装之后的效果: 误用了 = ,在文件保存时就会被提示,直接顺手改掉就行了,方便的不行 步骤1:Sublime集 ...

  9. 安卓开发:Please ensure that adb is correctly located at……问题解决方案

    话不多说,每一个开发安卓的菜鸟都会遇到这种问题. Please ensure that adb is correctly located at 'E:\种子下载\adt-bundle-windo... ...

  10. 栅格那点儿事(四D)

    统计值与空值 在上一篇的内容里反复提到了一个统计值.那这个统计值是怎么来的,具体是干嘛用的呢? 统计值主要就是用于栅格数据的显示和重分类,顾名思义就是一个波段中所有像元值的一个统计信息,最大值,最小值 ...