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

动态代理模式练习-代理Arraylist

    博客分类:
  • 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.dynamicproxy2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**代理处理器
 * @author zhengjiong
 * time:2011-9-22 下午06:20:57
 */
public class DynamicProxy implements InvocationHandler
{
	private Object obj;
	
	public DynamicProxy(Object obj)
	{
		this.obj = obj;
	}
	
	public static Object factory(Object object)
	{
		Object Obj = Proxy.newProxyInstance(object.getClass().getClassLoader(),
				object.getClass().getInterfaces(), new DynamicProxy(object));
		
		return Obj;
	}
	
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable
	{
		if(null != args)
		{
			for(Object obj : args)
			{
				System.out.println("args: " + obj);
			}
		}
		
		System.out.println("before method!: " + method);
		
		Object returnValue = method.invoke(obj, args);
		
		System.out.println("after method!: " + method);
		System.out.println("-------------------------");
		return returnValue;
	}
	
}

 

 

 

package com.zj.dynamicproxy2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;

public class Test
{
	public static void main(String[] args)
	{
		
		List list1 = new ArrayList();
		
		List listProxy = (List)DynamicProxy.factory(list1);
		
		listProxy.add("zhengjiong");
		
		
	}
}
分享到:
评论

相关推荐

    回调函数实例练习

    在Java中,代理模式可以通过动态代理或者静态代理实现。动态代理(如Java的`java.lang.reflect.Proxy`)可以在运行时创建一个类的代理对象,这个代理对象可以调用原对象的方法,并在调用前后添加额外的行为。静态...

    designpattern:Head First 设计模式练习

    代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。在Java中,静态代理和动态代理(JDK Proxy和CGLIB)是常见的实现方式。 最后,还有建造者模式(Builder)用于分步骤构建复杂对象,隔离对象的构造...

    软件设计模式与体系结构

    结构型模式关注如何组合类和对象以获得更大的结构,如适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。 - 适配器模式用于接口的转换。它可以将一个类的接口转换成客户期望的另一个接口...

    Java面试代码与编程题

    - **动态代理**:理解JDK动态代理和CGLIB动态代理的实现原理。 6. **IO与NIO** - **传统IO**:学习InputStream、OutputStream、Reader、Writer等基础IO类的使用。 - **NIO**:了解非阻塞I/O,通道(Channel)、...

    Java自己做的经典练习

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

    S1Accp6.0使用java理解程序逻辑1-17章课后题和上机练习

    9. **Chap17-高级特性**:最后的章节可能涉及一些高级主题,如反射、动态代理、设计模式等,这些都是进阶Java开发者需要掌握的技能。 通过北大青鸟S1Accp6.0的课程,学生不仅会学习到Java的基础语法,还将通过实践...

    java变成思想第四版中文版 练习题答案

    这两个特性在框架开发、自动化配置和动态代理等方面有广泛应用。 通过《Java编程思想》第四版的中文版练习题答案,你可以对照书中内容,逐一解决练习中的问题,加深对Java语言的理解,提高编程技能。同时,理论知识...

    27天成就java大神练习题.rar

    7. **反射与动态代理**:反射允许程序在运行时检查和修改其自身的行为,而动态代理则可以在运行时生成代理类以实现特定接口。这两项技术在插件系统、AOP(面向切面编程)等领域有广泛应用。 8. **泛型**:泛型增加...

    JAVA面试题JAVA面试题

    - **动态代理**:了解JDK动态代理和CGLIB动态代理的实现。 8. **设计模式** - **常见设计模式**:工厂模式、单例模式、观察者模式等23种设计模式的理解和应用。 9. **JVM** - **内存模型**:堆、栈、方法区、...

    java高级课后练习题2

    这在元编程和动态代理中非常有用,但需谨慎使用,因为它可能会破坏封装性。 5. **IO流**:Java的IO流系统支持对文件、网络、内存的数据读写。流分为字节流和字符流,有输入流和输出流之分,还有缓冲流、转换流等。...

    java 高级 练习题总汇总汇总汇

    在这些题目中,你可以期待涵盖诸如并发编程、内存管理、垃圾回收、多线程、设计模式、JVM优化、集合框架的深入理解、IO/NIO、反射、动态代理等关键领域。 并发编程是Java高级主题之一,它涉及到线程的创建与管理、...

    javase练习代码 Java学习资料

    8. **设计模式**: 练习中可能涉及一些常见设计模式,如单例、工厂、观察者、装饰器、代理等,这些都是软件开发中的最佳实践。 9. **JDBC**: Java数据库连接(JDBC)API用于访问和操作数据库。练习可能包括连接...

    java se代码练习 Java学习资料

    7. **反射**:Java反射机制允许程序在运行时动态地获取类的信息并操作类的对象,是实现元编程和动态代理的重要手段。 8. **泛型**:泛型是Java 5引入的新特性,用于在编译时检查类型安全,并且可以提高代码的重用率...

    java面试题超详细

    - **代理模式**:静态代理和动态代理的实现。 9. **网络编程** - **Socket通信**:客户端和服务器端的实现。 - **HTTP协议**:了解GET和POST请求的区别。 - **HTTPS**:与HTTP的区别,安全性的增强。 10. **...

    想学java,新手学java,怎样才能学好java,java视频教程,零基础学习java--java学习指导文档.doc

    - **动态代理**:运行时动态创建代理对象。 - **反射**:在运行时获取类的信息并操作类的对象。 #### 四、项目实战 通过实际项目练习来巩固所学知识是非常重要的环节: 1. **案例分析**:选择一个实际场景,比如...

    最全Java面试题 各大软件企业面试题

    - 动态代理:了解Proxy和InvocationHandler,实现运行时动态代理。 8. **网络编程** - Socket通信:理解TCP和UDP协议,创建Socket和ServerSocket进行网络通信。 - HTTP和HTTPS:了解HTTP协议的基本概念,以及...

    JAVA面试宝典和精品题库

    - 动态代理。 11. **设计模式** - 单例模式、工厂模式、建造者模式、观察者模式等23种经典设计模式的理解与应用。 12. **JVM优化** - 类加载机制:双亲委派模型、类加载器。 - 垃圾收集器:CMS、G1、ZGC、...

    java面试笔试题大汇总

    - 动态代理:实现接口的动态代理。 9. **设计模式** - 常见的设计模式:单例、工厂、观察者、装饰者、适配器、代理等。 10. **JVM优化** - 类加载机制:双亲委派模型。 - 类加载器:Bootstrap、Extension、...

    j2se练习代码 Java学习资料

    12. **设计模式**:如单例、工厂、装饰器、代理等经典设计模式的实现和应用。 通过这个压缩包中的练习代码,你可以逐步熟悉和掌握Java SE的各项核心特性,并且能够将所学应用到实际项目中。不断实践和调试代码是...

    JAVA基础入门及设计模式教程下载

    5. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。 6. **策略模式**:定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户。 【JAVA程序】 编写Java程序...

Global site tag (gtag.js) - Google Analytics