`

动态代理(Dynamic Proxy)

 
阅读更多
代码例子:
package com.test;
/**
 * 一个真实的接口
 * @author yale
 *
 */
public interface ISubject
{
	public void request();
}

package com.test;
/**
 * 一个真实的对象
 * @author yale
 *
 */
public class RealSubject implements ISubject
{

	public void request()
	{
		System.out.println("real subject request");
		
	}

}


package com.test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 一个动态代理对象,实现InvocationHandler
 * @author yale
 *
 */
public class DynamicSubject implements InvocationHandler
{  
	private Object obj;//被代理的对象
	
	public DynamicSubject(Object o)
	{
		this.obj = o;
	}

	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable
	{
		System.out.println("before request");
        method.invoke(obj,args);
        System.out.println("after request");
		return null;
	}

}


package com.test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * 调用测试
 * 
 * @author yale
 * 
 */
public class Client
{
	public static void main(String[] args)
	{
		RealSubject realSubject = new RealSubject();

		InvocationHandler handler = new DynamicSubject(realSubject);

		Class<?> classType = handler.getClass();

		ISubject subject = (ISubject) Proxy.newProxyInstance(classType
				.getClassLoader(), realSubject.getClass().getInterfaces(),
				handler);
		
		subject.request();
	}
}


分享到:
评论

相关推荐

    Castle Dynamic Proxy代理使用

    using Castle.DynamicProxy; public class SimpleSamepleEntity { public virtual string Name { get; set; } public virtual int Age { get; set; } public override string ToString() { return string....

    反射与动态代理Reflection&DynamicProxy.zip

    Java反射(Reflection)和动态代理(Dynamic Proxy)是Java编程中的高级特性,它们为程序提供了强大的功能和灵活性。本文将深入探讨这两个主题,并通过源码分析来加深理解。 首先,让我们了解一下Java反射。反射机制...

    SpringIOC,DI+dynamic proxy 实现盗版AOP

    本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)的功能,以达到在不修改原有代码的情况下增强或拦截方法调用的目的。 **一、Spring IOC(控制反转)*...

    08spring4_dynamicproxy.rar

    package cn.sxt.dynamicproxy; import java.util.ArrayList; import java.util.List; import cn.sxt.service.UserService; import cn.sxt.service.UserServiceImpl; public class Client { public ...

    WCF.rar_ChannelFactory_WCF DynamicProxy_WCF 动态_wcf 动态调用_动态WCF

    在WCF中,可以使用`Castle.DynamicProxy`库或者.NET Framework的`System.Reflection.Emit`命名空间来创建动态代理,从而在调用WCF服务时添加日志、事务控制等特性,而无需修改服务契约接口。 **WCF动态调用** 是指...

    Castle.DynamicProxy.zip

    Castle.DynamicProxy是一个强大的动态代理库,它允许我们在运行时创建类的代理,这些代理可以拦截并处理方法调用、属性访问等。通过使用Castle.DynamicProxy,我们可以创建一个动态代理类,该类将作为IBatisNET中的...

    java reflect and dynamic proxy .Java反射和动态代理

    **Java动态代理(Dynamic Proxy)** Java动态代理是Java提供的一种机制,可以在运行时创建具有特定接口的代理类。这通常用于实现AOP(面向切面编程)或事件处理等。主要由java.lang.reflect.Proxy和java.lang....

    DynamicProxy

    这是动态代理的简单实例,方便学,入手.这个例子非常的简单哦!

    JDK动态代理proxy

    JDK动态代理,全称为Java Dynamic Proxy,是Java标准库提供的一种强大且灵活的机制,允许我们在运行时创建代理类来实现指定的接口。这种机制主要用于实现AOP(面向切面编程)或为已有接口提供额外的功能,如日志、...

    Java动态代理语法Proxy类原理详解

    在上面的示例中,我们定义了一个动态代理类DynamicProxy,它实现了InvocationHandler接口。我们可以通过DynamicProxy对象来代理RealSubject对象,并对其方法调用进行处理和修改。 四、结论 Java动态代理语法Proxy...

    Dynamic Proxy

    绿色软件,无需安装,可以自动添加、修改代理服务器ip地址

    静态代理和动态代理

    Service dynamicProxy = (Service) Proxy.newProxyInstance( Service.class.getClassLoader(), new Class[]{Service.class}, new DynamicProxy(new RealService()) ); dynamicProxy.doSomething(); ``` 动态...

    LinFu.DynamicProxy.dll

    如果使用LinFu.DynamicProxy动态代理,引用NHibernate.ByteCode.LinFu.dll程序集并配置proxyfactory.factory_class节点为 &lt;property name="proxyfactory.factory_class"&gt; NHibernate.ByteCode.LinFu....

    dynamic-proxy-demo.zip

    在这个“dynamic-proxy-demo.zip”压缩包中,我们可能找到了关于这两种代理模式的示例代码。 首先,让我们来深入理解动态代理和静态代理的概念。 **静态代理:** 静态代理是最基础的形式,它通过创建目标对象的...

    Java静态代理与动态代理demo

    在动态代理中,我们创建了一个 `DynamicProxy` 类实现 `InvocationHandler` 接口,然后使用 `Proxy.newProxyInstance()` 方法创建代理对象。`invoke()` 方法会拦截所有对代理对象的方法调用,从而可以在调用前后添加...

    DynamicProxy:一个简单实用的JDK动态代理演示

    `Proxy` 类是用于创建动态代理对象的工厂,而`InvocationHandler`接口则定义了代理对象如何处理方法调用的逻辑。 1. **Proxy类**: `Proxy` 类提供了`newProxyInstance()`静态方法,它是创建动态代理对象的主要...

    Java动态代理Proxy和cglib

    在Java编程中,动态代理(Dynamic Proxy)是一种强大的设计模式,它允许我们在运行时创建具有特定接口的新对象。Java的动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口...

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    Service proxyService = (Service) DynamicProxy.getProxyInstance(realService); proxyService.doSomething(); ``` 代理模式在软件开发中有广泛的应用,例如在远程调用、事务管理、缓存控制、权限验证等场景。在...

    静态代理和动态代理简单实现代码

    在动态代理中,我们创建了一个实现了 `InvocationHandler` 接口的 `DynamicProxy` 类。`invoke()` 方法是关键,它会在调用真实对象的方法之前和之后添加额外的逻辑。使用 `Proxy.newProxyInstance()` 可以生成一个...

    DynamicProxy源码

    动态代理(DynamicProxy)是Java中一种强大的设计模式,它允许在运行时创建代理对象,这些代理对象可以作为原对象的“代理”,在调用原对象的方法时添加额外的功能,如日志、性能监控、事务处理等。在Java中,`java....

Global site tag (gtag.js) - Google Analytics