创建动态代理的步骤:
1.创建一个实现接口InvocationHandler的类,它必须实现invoke方法
2.创建被代理的类以及接口
3.通过Proxy的静态方法
newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) 创建一个代理
4.通过代理调用方法
所谓Dynamic Proxy是这样一种class:
它是在运行时生成的class,在生成它时你必须提供一组interface给它,然后该class就宣称它实现了这些interface。你当然可以把该class的实例当作这些interface中的任何一个来用。当然,这个Dynamic Proxy其实就是一个Proxy,它不会替你作实质性的工作,在生成它的实例时你必须提供一个handler,由它接管实际的工作
package com.zj.dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 动态代理处理器
* @author zhengjiong
* time:2011-9-22 下午05:23:00
*/
public class DynamicProxy implements InvocationHandler
{
private Object obj;
public DynamicProxy(Object obj){
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
System.out.println("before: " + method);
method.invoke(this.obj, args);
System.out.println("aftef: " + method);
return null;
}
}
package com.zj.dynamicproxy;
public class RealSubject implements Subject
{
@Override
public void request()
{
System.out.println("RealSubject request()!");
}
}
package com.zj.dynamicproxy;
public interface Subject
{
public void request();
}
package com.zj.dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test
{
public static void main(String[] args)
{
Subject realSubject = new RealSubject();
InvocationHandler h = new DynamicProxy(realSubject);
Subject sub = (Subject)Proxy.newProxyInstance(realSubject.getClass().getClassLoader(),
realSubject.getClass().getInterfaces(),h);
sub.request();
}
}
分享到:
相关推荐
python 代理模式练习代码
在这个"Objective-C代理练习"中,我们将深入探讨代理模式在Objective-C中的应用。代理模式是设计模式的一种,它允许一个对象代表另一个对象的行为,为两者之间提供一种间接的通信方式。 代理在Objective-C中的实现...
2. **代理模式的实现**:讲解静态代理和动态代理的实现细节,包括如何定义接口、如何编写代理类、如何处理方法调用等。 3. **代理模式的应用场景**:通过案例展示代理模式在实际开发中的应用,如数据缓存、权限控制...
在这个"设计模式练习"中,我们主要关注的是Java编程语言中的设计模式应用。 首先,我们要了解设计模式的三大类别:创建型模式、结构型模式和行为型模式。创建型模式如单例(Singleton)、工厂方法(Factory Method...
- **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,常用于远程代理、虚拟代理等。 2. **软件体系结构**: - **三层架构**(表示层、业务逻辑层、数据访问层):将应用分为界面展示、业务处理和数据...
动态代理是Java编程中一种非常重要的设计模式,它允许我们创建在运行时动态实现的代理对象,以便在不修改原始类的基础上扩展或增强其功能。动态代理主要应用于AOP(面向切面编程)和RPC(远程过程调用)等领域,为...
代理模式可以分为两类:静态代理和动态代理。 静态代理是指代理的关系在编译期间就确定了,也就是说,指定某个代理对象来为自己做事。例如,在结婚典礼上,你想请坤坤来表演,但是坤坤作为大明星,不能直接联系,...
2. **结构型模式**:包括适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、组合模式(Composite)和代理模式(Proxy)。这些模式主要处理对象的...
- **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,常用于远程代理、安全代理、虚拟代理等。 - **适配器模式**:将一个类的接口转换成客户希望的另一个接口。适配器使原本接口不兼容的类可以一起...
代理模式提供一个代表对象,控制对原对象的访问;组合模式将对象组织成树形结构,允许用户对单个对象和组合对象进行一致的操作。 3. 行为型设计模式:这类模式主要关注对象之间的职责分配和通信。命令模式将请求...
RabbitMQ是一个开源的消息代理和队列服务器,它在分布式系统中被广泛使用,用于处理异步任务、消息通信和工作队列。本实战练习将深入探讨RabbitMQ的核心概念和实际应用,帮助你掌握其核心功能。 1. **RabbitMQ基本...
- **`javax.servlet.GenericServlet`**:这是一个抽象类,提供了 `Servlet` 接口的基本实现,包括生命周期方法(如 `init()` 和 `destroy()`)。开发者可以通过继承此类来创建自己的 `Servlet`,并覆盖其中的方法来...
2. 结构型模式:描述如何组合类和对象以获得更大的结构,常见的有适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式和代理模式。 3. 行为型模式:涉及对象之间的职责分配,包括命令模式、解释器模式...
在IT行业中,代理模式是一种常用的设计模式,它允许我们在不修改原有对象的基础上,为对象提供额外的功能或控制。在这个"spring03-1"的例子中,我们通过租房的应用场景来探讨如何在Spring框架中实现代理模式。这个...
5. 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 其次,我们关注“体系结构”。软件体系结构是软件系统的高层次构造,它定义了系统的主要组件、组件间的交互以及指导系统构建的原则。常见的软件体系...
这对于测试、动态代理和框架设计等高级应用非常有用。 8. **泛型**:泛型是Java SE 5.0引入的新特性,用于提高类型安全性和代码可读性。理解泛型的概念,能够正确使用泛型类、泛型方法和通配符。 9. **网络编程**...
Spring AOP有两种代理模式:JDK动态代理和CGLIB代理。如果目标对象实现了接口,Spring将使用JDK动态代理;否则,它会使用CGLIB生成一个子类来实现切面功能。 5. **自动代理(Auto Proxy)**: Spring可以自动检测...
结构型设计模式包括适配器(Adapter)、桥接(Bridge)、装饰(Decorator)、外观(Facade)、享元(Flyweight)、组合(Composite)和代理(Proxy)。这些模式帮助我们更好地组织类和对象之间的关系,实现松耦合,...
- 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 3. **行为型模式**: - 责任链模式(Chain of Responsibility):避免对象之间耦合,将请求沿着处理者链传递,直到某个对象处理它。 - ...
- 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 3. **行为型模式**: - 责任链模式(Chain of Responsibility):避免将处理请求的发送者和接收者耦合在一起,使得发送者和接收者可以独立...