ProxyFactory类
package com.zzq.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyFactory implements InvocationHandler{ private Object target; public ProxyFactory() {} public void setTarget(Object target) { this.target = target; } public Object createProxyBean() { return Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), this ); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; try { this.before(); result = method.invoke(target, args); this.afert(); } catch (Exception e) { afterThrow(e); } return result; } public void before() { System.out.println("before"); } public void afert() { System.out.println("afert"); } public void afterThrow(Throwable t) { System.out.println("afterThrow"); if(t instanceof InvocationTargetException) { t = t.getCause(); System.out.println(t.getMessage()); } else { System.out.println(t.getMessage()); } } }
package com.zzq.proxy; public interface SimpleBean { public void sayHello(); public void throwException(); }
package com.zzq.proxy; public class SimpleBeanImpl implements SimpleBean { public void sayHello() { System.out.println("hello proxy pattern!"); } public void throwException() { throw new RuntimeException("出错了"); } public static void main(String[] args) { ProxyFactory factory = new ProxyFactory(); factory.setTarget(new SimpleBeanImpl()); SimpleBean proxy = (SimpleBean)factory.createProxyBean(); proxy.sayHello(); proxy.throwException(); } }
相关推荐
《解决IBatisNET v1.x在.NET 4.0下'Ambiguous match found'问题:Castle.DynamicProxy深度解析》 在.NET开发过程中,框架的选择和兼容性问题是开发者常常面临的挑战。其中,IBatisNET作为一款优秀的数据访问层框架...
本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)的功能,以达到在不修改原有代码的情况下增强或拦截方法调用的目的。 **一、Spring IOC(控制反转)*...
在本示例中,`ChannelFactory` 和 `DynamicProxy` 是两个关键概念,它们与WCF中的动态调用密切相关。 **ChannelFactory** 是WCF客户端编程模型中的一个重要组件。它是一个工厂模式的实现,用于创建与服务契约相匹配...
动态代理(DynamicProxy)是Java中一种强大的设计模式,它允许在运行时创建代理对象,这些代理对象可以作为原对象的“代理”,在调用原对象的方法时添加额外的功能,如日志、性能监控、事务处理等。在Java中,`java....
通过`Proxy`和`InvocationHandler`,我们可以方便地实现诸如日志记录、性能监控、事务管理等功能,这在设计模式中被称为“代理模式”。在实际开发中,尤其是在服务治理、AOP(面向切面编程)等领域,动态代理有着...
例如,通过MEF加载实现`INotifyDataErrorInfo`接口的验证服务,这些服务可以利用Castle DynamicProxy来拦截和增强视图模型的方法调用,进行数据验证。同时,Caliburn.Micro则负责处理视图和视图模型的交互,提供简单...
在这个“dynamic-proxy-demo.zip”压缩包中,我们可能找到了关于这两种代理模式的示例代码。 首先,让我们来深入理解动态代理和静态代理的概念。 **静态代理:** 静态代理是最基础的形式,它通过创建目标对象的...
Service proxyService = (Service) DynamicProxy.getProxyInstance(realService); proxyService.doSomething(); ``` 代理模式在软件开发中有广泛的应用,例如在远程调用、事务管理、缓存控制、权限验证等场景。在...
代理模式是设计模式中的一种,它提供了一种对目标对象进行增强的手段,即在不修改原有对象代码的情况下,通过代理对象来扩展或拦截目标对象的功能。在Java中,动态代理主要依赖于两个接口:`java.lang.reflect....
在"DynamicProxy"目录下的源码中,可以看到如何使用这些类和接口创建并操作动态代理的例子。 3. 接口代理(JDK动态代理): 接口代理是基于Java的反射机制实现的动态代理,适用于目标对象实现了接口的情况。在...
动态代理在Spring中主要用于实现面向切面编程(AOP),这是一个强大的设计模式,允许我们在不修改源代码的情况下,对应用程序的行为进行增强或拦截。 标题"dt.zip_spring_www.dynamic-proxy.c"暗示了这个压缩包包含...
System.out.println("Before doing something by dynamic proxy..."); } private void afterDoing() { System.out.println("After doing something by dynamic proxy..."); } } ``` 3. **创建动态代理对象**...
public class DynamicProxy implements InvocationHandler { private Object target; public DynamicProxy(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method...
Target proxyTarget = (Target) DynamicProxy.getProxyInstance(realTarget); proxyTarget.doSomething(); ``` 代理模式在实际开发中的应用广泛,如AOP(面向切面编程)框架Spring的AOP代理,以及在数据库操作中...
Target dynamicProxy = (Target) Proxy.newProxyInstance( Target.class.getClassLoader(), new Class[]{Target.class}, new DynamicProxyHandler(realTarget) ); // 调用代理对象的方法 dynamicProxy....
在动态代理中,我们创建了一个 `DynamicProxy` 类实现 `InvocationHandler` 接口,然后使用 `Proxy.newProxyInstance()` 方法创建代理对象。`invoke()` 方法会拦截所有对代理对象的方法调用,从而可以在调用前后添加...
System.out.println("DynamicProxy: Before action..."); } private void after() { System.out.println("DynamicProxy: After action..."); } } // 客户端代码 public class Client { public static void ...
你可以通过创建`Service`接口,实现`Target`和`Proxy`类(静态代理)以及`DynamicProxy`类(动态代理),然后通过调用`getInstance()`方法创建动态代理对象。运行这些示例,观察代理模式如何在实际场景中工作。 ...
Service dynamicProxy = (Service) Proxy.newProxyInstance( Service.class.getClassLoader(), new Class[]{Service.class}, new DynamicProxy(new RealService()) ); dynamicProxy.doSomething(); ``` 动态...
- 可能还有一个动态代理类(DynamicProxy),使用了`Proxy.newProxyInstance()`方法来创建代理对象,并实现了`InvocationHandler`接口,用于处理接口方法的调用。 此外,压缩包可能还包含测试类(Test)来展示如何...