`

动态代理的工厂实现

    博客分类:
  • java
 
阅读更多
动态代理的角色及其原理,见下文:
http://tiro-li.iteye.com/blog/1901678

动态代理的工厂类:DynamicProxyFactory.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class DynamicProxyFactory implements InvocationHandler
{
	//被代理的对象
	private Object proxyObj;
	
	private DynamicProxyFactory(Object obj)
	{
		this.proxyObj = obj;
	}
	
	//生成动态代理对象的工厂方法
	public static Object factory(Object obj)
	{
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),new DynamicProxyFactory(obj));
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
	{
		//使用反射调用被代理对象的方法
		return method.invoke(proxyObj,args);
	}
}


测试类:Test.java

import java.util.ArrayList;
import java.util.List;

public class Test
{
	public static void main(String[] args)
	{
		List<String> list = (List<String>)DynamicProxyFactory.factory(new ArrayList<String>());
		
		list.add("hello");
		list.add("world");
		
		System.out.println(list);
	}
}

分享到:
评论

相关推荐

    动态代理和工厂方法例子

    在Java中,我们可以使用Java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现动态代理。Proxy类用于创建代理对象,而InvocationHandler接口则定义了调用处理程序,处理代理对象的方法调用。 ...

    工厂类中实现动态代理

    在结合工厂模式实现动态代理时,我们可以创建一个工厂类,该工厂负责根据需求生成动态代理对象。例如,当需要对数据访问层(DAO)进行日志记录或者事务管理时,可以通过工厂生成带有这些额外功能的代理DAO对象。这样...

    java设计模式(工厂模式,动态代理,责任链模式……)实例源码

    这个压缩包中包含的实例源码涵盖了多种设计模式,包括工厂模式、动态代理和责任链模式。让我们深入探讨这些设计模式的核心概念、用途以及它们在实际编程中的应用。 1. 工厂模式:这是最基础的设计模式之一,属于...

    个人用java动态代理模拟实现spring aop

    接着,我们需要一个代理工厂(ProxyFactory)来创建代理对象,工厂会根据目标对象是否实现接口选择JDK或CGLIB。 1. 定义切点(Pointcut): - 可以使用正则表达式或者自定义注解来定义切点,表示哪些方法会被拦截...

    动态代理由浅入深

    在动态代理的实现中,Proxy 类是生成代理对象的工厂,它可以生成代理对象。Proxy 类的 newProxyInstance 方法是生成代理对象的入口,该方法需要三个参数:类加载器、被代理对象的接口和 InvocationHandler 接口的...

    JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)

    1. **Proxy类**:Proxy类是一个工厂类,通过`Proxy.newProxyInstance()`方法可以创建动态代理对象。这个方法需要三个参数:类加载器、代理对象所实现的接口列表、以及一个InvocationHandler实例。 2. **...

    使用JAVA中的动态代理实现数据库连接池

    在Java编程中,动态代理是一种强大的工具,它可以让我们在运行时创建一个实现了特定接口的新类。在本文中,我们将探讨如何使用Java的动态代理来实现数据库连接池,从而解决传统连接池设计中的耦合度问题和资源管理...

    java代理机制 JDK动态代理和cglib代理 详解

    本文将深入探讨两种主要的Java代理实现:JDK动态代理和CGLIB代理。 一、JDK动态代理 JDK动态代理基于接口实现,它要求被代理的类必须实现至少一个接口。在运行时,Java会动态地创建一个新的类,这个类实现了与原始...

    基于MAVEN项目的CGLib动态代理原理及实现

    本文将深入探讨如何在基于Maven的项目中利用CGLib库实现动态代理。CGLib(Code Generation Library)是Java中一个高性能的代码生成库,它在运行期通过字节码技术为类创建子类,以此实现动态代理。 1. Maven项目配置...

    java动态代理demo

    `java.lang.reflect.Proxy` 类是用于创建动态代理对象的工厂类。我们需要使用`Proxy.newProxyInstance()`方法,传入类加载器、接口数组以及自定义的`InvocationHandler`实例,来生成代理对象。 5. **动态代理示例*...

    java动态代理例子

    CGLIB通过字节码技术生成子类来实现动态代理。 1. **创建Enhancer对象**:CGLIB的核心是`net.sf.cglib.proxy.Enhancer`类,它是CGLIB代理的工厂类。通过Enhancer,我们可以设置回调对象(相当于JDK动态代理中的...

    java动态代理实现数据库连接池

    ### Java动态代理实现数据库连接池 #### 背景与挑战 在开发应用程序时,数据库连接池是一个常用且重要的组成部分。频繁地建立和断开数据库连接不仅效率低下,还可能导致性能瓶颈。为了解决这一问题,引入了数据库...

    java动态代理 经典文章(word 2007格式的)

    `Proxy`类是Java动态代理的工厂,通过`newProxyInstance()`方法创建代理对象。该方法需要传入三个参数:类加载器、目标对象实现的接口列表和`InvocationHandler`实例。 4. **面向切面编程(AOP)**: AOP是一种...

    JDK动态代理源码

    1. **Java.lang.reflect.Proxy**:这是JDK动态代理的关键类,它提供了创建动态代理对象的工厂方法`newProxyInstance()`。这个方法接收三个参数:`ClassLoader`用于加载代理类,`Interface[]`表示代理对象需要实现的...

    动态代理的前世今生-绝对经典

    `Proxy` 类是用于创建动态代理对象的工厂,而`InvocationHandler`接口定义了代理对象调用方法时的行为。当我们创建一个代理对象时,需要提供一个实现了`InvocationHandler`的实例,并指定一组接口,代理对象将实现...

    Jdk动态代理,cglib动态代理,反射和拦截器(链)示例

    CGLIB通过生成子类并在子类的方法上织入增强代码来实现动态代理。相较于JDK动态代理,CGLIB在性能上有时会更优,特别是在处理未实现接口的类时。 反射是Java中另一种强大的工具,它允许程序在运行时检查和操作类、...

    java 简答可复用动态代理类

    下面将详细解释这两个关键组件以及如何使用DOM4J库和CGLIB实现动态代理。 1. **Java动态代理原理** - `Proxy`类是Java提供的动态代理的工厂,它可以根据一个接口生成实现了该接口的代理类的对象。这个代理类会动态...

    输出JDK和CGLib动态代理产生的class文件.zip

    CGLib通过字节码技术为类创建子类来实现动态代理,因此,被代理的目标对象不必实现任何接口。CGLib的核心类包括MethodInterceptor接口和Enhancer类。Enhancer类可以看作是CGLib的工厂,它通过反射机制获取目标类,并...

    JavaEE spring自动实现AOP代理

    Spring 提供了两种方式来实现AOP代理:JDK动态代理和CGLIB代理。 1. **JDK动态代理**: - JDK动态代理基于Java的接口实现,适用于目标对象实现了接口的情况。Spring会为这个接口创建一个代理类,代理类在调用真实...

Global site tag (gtag.js) - Google Analytics