JDK动态代理模式
来源:互联网 发布:近代报刊数据库爱如深 编辑:程序博客网 时间:2024/05/22 00:27
代理模式分为静态代理和动态代理,关于动态代理参考我前一篇文章静态代理
但是静态代理的问题就是灵活性不太好,我可能需要动态的改变被代理的类,这样可以增加扩展性和灵活性。依赖java反射在运行期间确定到底由具体的实现类去实现完成代理者的调用功能。
这里解耦了代理者也被代理之间的耦合性,可以动态的选择需要代理的类,这样可以大大增加系统的可扩展性,利用了大量的反射虽然灵活性达到了,但是反射的性能比直接调用的性能会降低不少。
// 定义一个接口,这里我们类比员工interface Employee { // 我们工作就是编程 void program();}// 程序员也是员工class Developer implements Employee { @Override public void program() { System.out.println("我是开发者,真正在写代码..."); }}
代理类:
// 技术总监class CTO implements InvocationHandler { // 被代理的类 private Object target; public Object getInstance(Object target) { this.target = target; return java.lang.reflect.Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } // 这个Object为被代理的类方法的返回参数,proxy为代理类,method为被代理类的方法,args为被调用类的参数 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; //判断是否有了员工 if(target != null) { // 这里代理之前 System.out.println("before proxy executed.."); // 这里完成代理的功能 result = method.invoke(target, args); // 在代理之后 System.out.println("after proxy executed..."); } else { System.out.println("还没有代理的员工"); result = null; } return result; }}
就是在代理人这个代码块里没有了被代理的类。与被代理的类完成解耦。
客户端调用:
CTO cto = new CTO(); Employee employee = (Employee)cto.getInstance(new Developer()); employee.program();
执行结果:
before proxy executed..我是开发者,真正在写代码...after proxy executed...
1 0
- JDK动态代理模式
- JDK动态代理模式
- JDK动态代理模式
- JDK动态代理模式
- 代理模式,JDK动态代理
- 代理模式-JDK动态代理
- 动态代理模式之JDk动态代理
- 代理模式,JDK动态代理,SpringAOP来龙去脉
- 代理模式和JDK动态代理
- 代理模式之JDK动态代理
- java代理模式、动态代理(JDK,CGLIB)
- 代理模式二(JDK动态代理)
- java 代理模式 jdk动态代理
- 代理模式之jdk动态代理
- 代理模式之jdk动态代理
- 代理模式(静态代理、jdk动态代理)
- 设计模式---动态代理(基于JDK的动态代理)
- java动态代理模式Proxy之JDK动态代理机制
- 【01背包/母函数】HDU2079选课时间(题目已修改,注意读题)【用背包求解方案数】
- 【4.29安恒杯】writeup
- 一个简单登陆示例的MVC和MVP实现
- Oracle12c连接问题[ORA-28040]
- SpringMVC中使用Interceptor拦截器
- JDK动态代理模式
- Java对英文句子进行倒序排序
- Makefile相关
- Android主题换肤 无缝切换
- JavaScript 学习笔记一基础入门
- jQuery的选择器
- 采用MogoDB生成ID的策略
- Swift 下debug状态打印log
- oom解决方式