`
zhengjiong
  • 浏览: 71039 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

动态代理模式练习-代理自己写的类

    博客分类:
  • Java
阅读更多

 

创建动态代理的步骤:

 

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 代理模式练习代码

    python 代理模式练习代码

    Objective-C代理 练习

    在这个"Objective-C代理练习"中,我们将深入探讨代理模式在Objective-C中的应用。代理模式是设计模式的一种,它允许一个对象代表另一个对象的行为,为两者之间提供一种间接的通信方式。 代理在Objective-C中的实现...

    设计模式之代理模式视频教学

    2. **代理模式的实现**:讲解静态代理和动态代理的实现细节,包括如何定义接口、如何编写代理类、如何处理方法调用等。 3. **代理模式的应用场景**:通过案例展示代理模式在实际开发中的应用,如数据缓存、权限控制...

    设计模式练习,很有感触

    在这个"设计模式练习"中,我们主要关注的是Java编程语言中的设计模式应用。 首先,我们要了解设计模式的三大类别:创建型模式、结构型模式和行为型模式。创建型模式如单例(Singleton)、工厂方法(Factory Method...

    软件设计模式与体系结构练习题

    - **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,常用于远程代理、虚拟代理等。 2. **软件体系结构**: - **三层架构**(表示层、业务逻辑层、数据访问层):将应用分为界面展示、业务处理和数据...

    动态代理源代码 可以练习用

    动态代理是Java编程中一种非常重要的设计模式,它允许我们创建在运行时动态实现的代理对象,以便在不修改原始类的基础上扩展或增强其功能。动态代理主要应用于AOP(面向切面编程)和RPC(远程过程调用)等领域,为...

    静态代理及动态代理的劣迹摘要

    代理模式可以分为两类:静态代理和动态代理。 静态代理是指代理的关系在编译期间就确定了,也就是说,指定某个代理对象来为自己做事。例如,在结婚典礼上,你想请坤坤来表演,但是坤坤作为大明星,不能直接联系,...

    计算机相关专业设计模式练习

    2. **结构型模式**:包括适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、组合模式(Composite)和代理模式(Proxy)。这些模式主要处理对象的...

    java23中设计模式练习源码

    - **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,常用于远程代理、安全代理、虚拟代理等。 - **适配器模式**:将一个类的接口转换成客户希望的另一个接口。适配器使原本接口不兼容的类可以一起...

    设计模式--design patterns课件

    代理模式提供一个代表对象,控制对原对象的访问;组合模式将对象组织成树形结构,允许用户对单个对象和组合对象进行一致的操作。 3. 行为型设计模式:这类模式主要关注对象之间的职责分配和通信。命令模式将请求...

    rabbitmq 实战练习-rabbitmq-actual.zip

    RabbitMQ是一个开源的消息代理和队列服务器,它在分布式系统中被广泛使用,用于处理异步任务、消息通信和工作队列。本实战练习将深入探讨RabbitMQ的核心概念和实际应用,帮助你掌握其核心功能。 1. **RabbitMQ基本...

    强化练习-Servlet.doc

    - **`javax.servlet.GenericServlet`**:这是一个抽象类,提供了 `Servlet` 接口的基本实现,包括生命周期方法(如 `init()` 和 `destroy()`)。开发者可以通过继承此类来创建自己的 `Servlet`,并覆盖其中的方法来...

    漫谈设计模式-从面向对象开始

    2. 结构型模式:描述如何组合类和对象以获得更大的结构,常见的有适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式和代理模式。 3. 行为型模式:涉及对象之间的职责分配,包括命令模式、解释器模式...

    spring03-1

    在IT行业中,代理模式是一种常用的设计模式,它允许我们在不修改原有对象的基础上,为对象提供额外的功能或控制。在这个"spring03-1"的例子中,我们通过租房的应用场景来探讨如何在Spring框架中实现代理模式。这个...

    软件设计模式与体系结构课后习题代码(孙玉山).zip

    5. 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 其次,我们关注“体系结构”。软件体系结构是软件系统的高层次构造,它定义了系统的主要组件、组件间的交互以及指导系统构建的原则。常见的软件体系...

    Java自己做的经典练习

    这对于测试、动态代理和框架设计等高级应用非常有用。 8. **泛型**:泛型是Java SE 5.0引入的新特性,用于提高类型安全性和代码可读性。理解泛型的概念,能够正确使用泛型类、泛型方法和通配符。 9. **网络编程**...

    Spring-AOP练习源码

    Spring AOP有两种代理模式:JDK动态代理和CGLIB代理。如果目标对象实现了接口,Spring将使用JDK动态代理;否则,它会使用CGLIB生成一个子类来实现切面功能。 5. **自动代理(Auto Proxy)**: Spring可以自动检测...

    《Java设计模式》课后答案-刘伟.rar

    结构型设计模式包括适配器(Adapter)、桥接(Bridge)、装饰(Decorator)、外观(Facade)、享元(Flyweight)、组合(Composite)和代理(Proxy)。这些模式帮助我们更好地组织类和对象之间的关系,实现松耦合,...

    Head First设计模式 高清 中文版-扫描版

    - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 3. **行为型模式**: - 责任链模式(Chain of Responsibility):避免对象之间耦合,将请求沿着处理者链传递,直到某个对象处理它。 - ...

    软件设计模式与体系结构孙云山课后习题234章答案.zip

    - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 3. **行为型模式**: - 责任链模式(Chain of Responsibility):避免将处理请求的发送者和接收者耦合在一起,使得发送者和接收者可以独立...

Global site tag (gtag.js) - Google Analytics