【闲着没事儿干】JDK动态代理
2016-01-25 22:56
477 查看
接口类
实现类 // 必须继承接口才可以哦,否则会出错的。不信试试看
动态代理类
测试类
package com.luxs.spring.dynamicProxy; import com.luxs.bean.Teacher; public interface Subject { public void request(); public void request(String name); public void request(Teacher teacher); }
实现类 // 必须继承接口才可以哦,否则会出错的。不信试试看
package com.luxs.spring.dynamicProxy; import com.luxs.bean.Teacher; public class RealSubject implements Subject{ public RealSubject() { } public void request(String name) { System.out.println(String.format("我%s特么才是干活的!", name)); } public void request() { System.out.println("我特么才是干活的!"); } public void request(Teacher teacher) { System.out.println("Teacher 我特么才是干活的!"); } }
动态代理类
package com.luxs.spring.dynamicProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DynamicSubject implements InvocationHandler { //必须实现这个接口 private Object sub; public DynamicSubject(Object obj) { this.sub = obj; } // 代理类执行 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 调用前 System.out.println(String.format("Befor Excute !", "")); // 输出参数 if (args != null) { for (Object obj : args) { System.out.println(obj.getClass()); } } // 调用本体类执行 method.invoke(sub, args); // 调用后 System.out.println("After Excute !"); return null; } }
测试类
package com.luxs.spring.dynamicProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import com.luxs.bean.Teacher; public class Client { public static void main(String[] args) { // 真正运行的对象 Subject realSubject = new RealSubject(); // 调用捕捉(反射机制) InvocationHandler dySub = new DynamicSubject(realSubject); // 得到真正运行对象的类 Class<?> cls = realSubject.getClass(); // 生成代理对象(工厂模式) Subject subject = (Subject) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), dySub); // 方法调用(->InvocationHandler里的方法) subject.request(); subject.request("鲁小帅"); Teacher t = new Teacher(); t.setAddr("美国加州"); t.setId(1); t.setName("鲁小帅"); subject.request(t); } }
相关文章推荐
- JAVA 下拉列表和滚动条
- JAVA 单选按钮、复选按钮
- JAVA 文本框、密码框、标签
- 关于struts2的OGNL(二)
- JAVA 综合布局应用
- spring--hibernate 事务
- JAVA 网格布局管理器
- JAVA 流式布局管理器
- JAVA 边界布局管理器
- Java数据流传输
- Java内存区域分配基恩内存溢出异常
- Android实战(七)------myeclipse发布Android项目-------Android生成keystore
- Android实战(七)------myeclipse发布Android项目-------Android生成keystore
- 从头认识java-18.4 java多线程原子性操作里面的坑
- Springmvc与mybatis整合,log4j输出sql语句
- 针对Spring模块进行单元测试
- uploadify在火狐下上传不了的解决方案,java版(Spring+SpringMVC+MyBatis)详细解决方案
- uploadify在火狐下上传不了的解决方案,java版(Spring+SpringMVC+MyBatis)详细解决方案
- Selenium2(java)selenium常用API 四
- SAXReader通配符搜索XML节点