JAVA 动态代理
来源:互联网 发布:阿里云的网站空间 编辑:程序博客网 时间:2024/05/20 01:35
代理设计模式
定义:为其他对象提供一种代理以控制对这个对象的访问。
动态代理的使用
- 动态代理类都必须要实现InvocationHandler接口,当我们在调用代理对象的方法的时候,这个方法的调用就会被转发到由InvocationHandler的invoke方法来进行调用。
- 看一下InvocationHandler接口中的invoke方法。
Object invoke(Object proxy, Method method, Object[] args) throws Throwableproxy: 指代我们所代理的那个真实对象method: 指代的是我们所要调用真实对象的某个方法的Method对象args: 指代的是调用真实对象某个方法时接受的参数```
- 还有Proxy类,这个类的主要作用就是用来动态创建一个代理对象,使用最多的就是newProxyInstance方法:
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler invocationHandler) throws IllegalArgumentExceptionloader: 代理类的ClassLoader,定义由那个对象来生成代理对象interfaces: 一组接口数组,代理对象实现的接口invocationHandler :一个In从cationHandler对象,表示和那个对象进行关联
动态代理实例
- 先创建一个接口Subject,定义一个方法doSomething();
public interface Subject { public void doSomething(); }
- 创建一个具体的实现类,真是一个真实的对象RealSubject
public class RealSubject implements Subject { public void doSomething() { System.out.println( "call doSomething" ); } }
- 创建一个动态代理类,都需要实现invocationHandler。
public class MyInvocationHandler implements InvocationHandler { private Object proxyedObj;//代理的对象 MyInvocationHandler(Object obj) { proxyedObj=obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //调用具体对象方法前,处理一些业务 System.out.println( "before call doSomething " ); //转调具体目标对象的方法 Object result =method.invoke(proxyedObj,args); //在代理真实对象后我们也可以添加一些自己的操作 System.out.println("after call doSomething"); return result; }}
- 创建一个测试程序
RealSubject real = new RealSubject(); Subject proxySubject = (Subject)Proxy.newProxyInstance(real.getClass().getClassLoader(), new Class[]{Subject.class}, new ProxyHandler(real)); System.out.println(proxySubject.getClass().getName());//$Proxy* proxySubject.doSomething();
- 通过 Proxy.newProxyInstance 创建的代理对象是在jvm运行时动态生成的一个对象,它并不是我们的InvocationHandler类型,也不是我们定义的那组接口的类型,而是在运行是动态生成的一个对象,并且命名方式都是这样的形式,以$开头,proxy为中,最后一个数字表示对象的标号。
0 0
- Java 代理,动态代理
- [Java] Java 动态代理
- java代理及动态代理
- java代理模式--动态代理
- Java静态代理、动态代理
- Java 代理之 动态代理
- Java 代理与动态代理
- java静态代理,动态代理
- 代理模式&java动态代理
- Java代理与动态代理
- Java静态代理动态代理
- JAVA代理模式--动态代理
- java 代理和动态代理
- JAVA动态代理 代理模式
- Java动态代理--jdk代理
- Java动态代理--cglib代理
- Java 代理与动态代理
- java代理模式-动态代理
- Sql 求两列去重后的总数量
- meteor安装太慢问题
- ASP.NET MVC WebAPI请求
- heritrix1.14.4配置-没有add和change按钮的问题
- opencv保存intel realsense SR300获得的图像
- JAVA 动态代理
- glPushMatrix()和glPopmatirx()
- 快速打开chorme书签
- httpclient 中文响应乱码
- Java基础学习总结(10)——JAVA解析XML
- 2003 - Can't connect to MySql server on 'localhost'(10061)
- 【js】JSON.stringify 语法实例讲解
- zkw线段树
- Android 栈溢出攻击—[0]原理