先定义一个接口,根据代理模式的原理,被代理类与代理类都要实现它。

public interface Person {
void eat();
}

再写一个实际执行任务的类(被代理类):

public class RealPerson implements Person {
@Override
public void eat() {
System.out.println("I am eating");
}
}

代理类的写法:写一个InvocationHandler的子类

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method; public class PersonProxyHandler implements InvocationHandler {
private Person man; public PersonProxyHandler(Person man) {
this.man = man;
} @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before eating");
Object res = method.invoke(man, args);
System.out.println("after eating");
return res;
} }

按照常规想法,代理类要拥有一个被代理类对象的引用,然后在invoke方法中,method.invoke(man, args); 这一句代码表明对实际对象的调用,其余代码就是AOP增强了。

主类:

import java.lang.reflect.Proxy;

public class Solution {

    public static void main(String[] args) {
RealPerson man = new RealPerson();
PersonProxyHandler realHandler = new PersonProxyHandler(man); Person proxy = (Person) Proxy.newProxyInstance(
Person.class.getClassLoader(),
new Class[]{Person.class},
realHandler);
proxy.eat();
}
}

运行main方法,控制台打印如下:

before invoke
is eating
after invoke

这种代理方式也称为“JDK动态代理”

最新文章

  1. Js 验证中文字符长度
  2. 修改订单的收货时间(MySQL)脚本
  3. 51nod算法马拉松13
  4. 如何做好一名DBA【转】
  5. perl 改变对象属性
  6. android网络编程之HttpUrlConnection的讲解--实现文件断点下载
  7. 本地Windows环境Dubbo搭建测试
  8. python笔记19-递归调用
  9. centos安装MySQL5.7
  10. 【MySql】启动/停止
  11. 第一节,初识OpenCV3-图像的读、写、显、格式转化等
  12. word个人信息的一种处理方式
  13. zookeeper选举状态介绍 摘自https://cloud.tencent.com/developer/news/303891
  14. Fastjson和Gson零碎总结
  15. 基于localStorge开发登录模块的记住密码与自动登录
  16. 《JavaScript面向对象编程指南》
  17. [经验]微信开放平台,一个APP secret可以绑定一个APP,然后再绑定一个ipad 版本APP
  18. java编码规范_缩进和注释
  19. c99柔性数组
  20. sklearn.metrics.roc_curve使用说明

热门文章

  1. Haskell 安装
  2. jdbc元数据
  3. 自定义圆形图片控件CircleImageView的实现
  4. Uboot启动分析之Start.S
  5. regsvr32 错误解决方案
  6. 关于oracle下提示ORA-00904:Invalid identifier错误的问题
  7. kvm网络虚拟化(vlan,bond,vlan+bond)(3)
  8. Redis ==> 集群的三种模式
  9. 小程序onLaunch事件的坑
  10. [转帖]etcd 在超大规模数据场景下的性能优化