Host.java

package cn.zys.dynamiproxy;

public class Host implements Rent{
public void rent(){
System.out.println("host房屋出租");
} @Override
public void oks() {
// TODO Auto-generated method stub
System.out.println("我是最新的增强方法");
}
}

Rent.java

package cn.zys.dynamiproxy;

public interface Rent {
public void rent();
public void oks();
}

ProxyInvocationHandler.java    实现InvocationHandler接口

package cn.zys.dynamiproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; public class ProxyInvocationHandler implements InvocationHandler{ private Object objs; public Object getObjs() {
return objs;
} public void setObjs(Object objs) {
this.objs = objs;
} /*
* 生成代理类
* Loader 定义代理类的加载器
* Interfaces 定义代理类要实现接口的列表
* */
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(), objs.getClass().getInterfaces(), this);
} /*
* proxy 是代理类
* method 代理类的调用处理程序的方法对象
* */
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
log(method.getName());
Object obj = method.invoke(objs, args);
return obj;
} //看房
private void seehouse(){
System.out.println("看房");
} //收中介费
private void frea(){
System.out.println("收取中介费");
} //测试日志
public void log(String methodName){
System.out.println("执行"+methodName+"方法");
}
}

实现类  Men.java

package cn.zys.dynamiproxy;

import java.util.ArrayList;
import java.util.List; public class Men {
public static void main(String[] args) {
// Host host = new Host();
// ProxyInvocationHandler pih = new ProxyInvocationHandler();
// pih.setObjs(host);
// Rent rent = (Rent) pih.getProxy();
// rent.rent(); //测试list
ProxyInvocationHandler pih = new ProxyInvocationHandler();
pih.setObjs(new ArrayList());
List list = (List) pih.getProxy();
list.add("haha");
}
}

一个动态代理指某一个业务

一个动态代理可以代理多个类

最新文章

  1. WebService基本使用
  2. jsp页面输出序号
  3. linux下的audit服务
  4. gdb多进程调试
  5. postman+newman(2)
  6. iOS绘图教程 (转,拷贝以记录)
  7. WPF RichTextBox 如何滚动到光标所在位置、滚动条操作
  8. 【转】iOS-Core-Animation-Advanced-Techniques(六)
  9. js去除字符串空格
  10. angular验证表单
  11. fitnesse - 安装部署
  12. vuex的学习笔记
  13. Podfile语法参考
  14. [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher 问题--MyEclipse设置JDK版本
  15. 微信redirect_uri域名与后台配置不一致,错误代码10003
  16. CO配置步骤清单 - 2004
  17. plsql 操纵表数据的2种方式
  18. oracle 异常错误处理
  19. Python 字符串 整数 浮点数
  20. hbase 性能调

热门文章

  1. Micropython教程之TPYBoard开发板驱动舵机教程(萝卜学科编程教育)
  2. SQL语句学习(二)
  3. 《高性能Linux服务器构建实战》——第1章轻量级HTTP服务器Nginx
  4. Clickhouse 条形图📊函数展示
  5. H5 -- 取消a标签在点击时的背景颜色
  6. 全网最简单明了的MySQL连接Eclipse方法(JDBC详细安装方式及简单操作)2020新版
  7. python(If 判断)
  8. java权限设计思考
  9. JAVA设计模式之桥接模式(bridge)
  10. 软路由OpenWrt(LEDE)2020.4.6编译 UnPnP+NAS+多拨+网盘+DNS优化