设计模式之代理模式
来源:互联网 发布:java发音 编辑:程序博客网 时间:2024/06/08 05:33
1 代理模式:就是一个类被另外一个类代替来执行某个方法,使得执行原来的方法的时候增加一些业务逻辑处理。
2 动态代理:通过反射技术,在运行过程进行代理的代理模式。
3 区别:静态代理:在程序编译时候,就已经形成代理类。
动态代理:利用反射技术实现,在程序运行时候才能得到代理类。
4 动态代理分为需要实现接口和不需要实现接口两种:
被代理类实现接口的时候可以用 反射包下的InvocationHandler和Proxy实现生成代理;
被代理类没有实现接口,此时之前的方式就不可以用了,需要cglib生成二进制码,来获取代理类。
5 基于反射情况的动态代理模式:
接口:
package com.in;public interface Hello {public void say();}
实现类:
package com.in;public class HelloImpl implements Hello{@Overridepublic void say() {System.out.println("in hello");}}
代理类:
package com.in;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class HelloProxy implements InvocationHandler{private Object obj;public HelloProxy(Object obj){this.obj=obj;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {Object result=null;before();method.invoke(obj, args);after();return result;}public void before(){System.out.println("in before");}public void after(){System.out.println("in after");}}说明:声明一个被代理类型的属性,通过构造方法实例化。method.invoke(被代理对象,参数)。
测试类:
package com.in;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;public class Test {public static void main(String[] args) {Hello hello=new HelloImpl();InvocationHandler proxy=new HelloProxy(hello);Hello h=(Hello) Proxy.newProxyInstance(hello.getClass().getClassLoader(), hello.getClass().getInterfaces(), proxy);h.say();}}说明:Proxy生成被代理对象。
0 0
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之-代理模式
- 设计模式之 代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之-----代理模式
- 设计模式之代理模式
- 设计模式之-代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- LeeetCode #84 Largest Rectangle in Histogram
- DQL、DML、DDL、DCL的概念与区别
- 禅与软件测试--创造性思维
- OC - NSStringAndNSMutableString
- dailyAdvice服务器与客户端
- 设计模式之代理模式
- 数据结构(Java语言)——BinarySearchTree简单实现
- HDU 4857 逃生 【逆拓扑 优先队列】
- 带外数据和TCP紧急指针
- 登录注册代码
- vector::clear
- java内部类学习笔记
- 解读核心动画类
- Qt打包生成exe程序