概述
用于动态代理的 Java 库。它提供了一种简单的方式来创建代理对象,这些代理对象可以在运行时拦截和修改方法调用。
maven依赖
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-proxy</artifactId><version>1.0</version>
</dependency>
<dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>2.1_3</version><optional>true</optional>
</dependency>
<dependency>
<groupId>jboss</groupId><artifactId>javassist</artifactId><version>3.0</version><optional>true</optional>
</dependency>
<dependency><groupId>edu.oswego.cs.concurrent</groupId><artifactId>com.springsource.edu.oswego.cs.dl.util.concurrent</artifactId><version>1.3.4</version>
</dependency>
示例
ProxyFactory factory = new CglibProxyFactory();DemoServiceImpl invokerProxy = (DemoServiceImpl) factory.createDelegatorProxy(new BeanProvider(DemoServiceImpl.class),new Class[]{DemoServiceImpl.class});System.out.println(invokerProxy.get());
ProxyFactory factory = new CglibProxyFactory();DemoServiceImpl demoService = new DemoServiceImpl();DemoServiceImpl invokerProxy = (DemoServiceImpl) factory.createInterceptorProxy(demoService,e -> {System.out.println("功能扩展-方法执行前");Object[] arguments = e.getArguments();Object proxy = e.getProxy();Method method = e.getMethod();Object proceed = e.proceed();System.out.println("功能扩展-方法执行后");return "处理过的业务结果"+proceed;},new Class[]{DemoServiceImpl.class});System.out.println(invokerProxy.get());
代理工厂
- ProxyFactory JDK代理,是CglibProxyFactory和JavassistProxyFactory的父类
方法 | 说明 |
---|
ProxyFactory() | 构造方法 |
canProxy(Class[] proxyClasses) | 判断只当类是否可以被代理 |
createDelegatorProxy(ObjectProvider delegateProvider, Class[] proxyClasses) createDelegatorProxy(ClassLoader classLoader, ObjectProvider delegateProvider, Class[] proxyClasses) | 创建一个对象提供器代理对象 |
createInterceptorProxy(Object target, Interceptor interceptor, Class[] proxyClasses) createInterceptorProxy(ClassLoader classLoader, Object target, Interceptor interceptor, Class[] proxyClasses) | 创建一个拦截器代理对象 |
createInvokerProxy(Invoker invoker, Class[] proxyClasses) createInvokerProxy(ClassLoader classLoader, Invoker invoker, Class[] proxyClasses) | |
- CglibProxyFactory cglib代理,方法同ProxyFactory
- JavassistProxyFactory javassist代理,方法同ProxyFactory
常用接口可用实现类
实现类 | 说明 |
---|
BeanProvider | 指定Class获取对象 |
CloningProvider | 通过指定对象克隆获取对象 |
ConstantProvider | 通过指定对象赋值获取对象 |
NullProvider | 获取null值对象 |
SingletonProvider | 单例对象提供器 |
BurlapProvider | 通过Burlap远程获取对象 |
HessianProvider | 通过Hessia远程获取对象 |
JaxRpcProvider | 通过JaxRpc远程获取对象 |
RmiProvider | 通过Rmi远程获取对象 |
SessionBeanProvider | 通过EJB远程获取对象 |
实现类 | 说明 |
---|
ExecutorInterceptor | 多线程处理拦截器 |
FilteredInterceptor | 过滤器拦截器,通过指定过滤器拦截需要处理的方法 |
LoggingInterceptor | 日志拦截器,通过日志输出方法执行相关信息 |
SerializingInterceptor | 序列化拦截器,序列化复制对象处理 |
实现类 | 说明 |
---|
DuckTypingInvoker | 通过动态调用目标对象的方法集合判断其类型,而非依赖静态继承关系或显式接口。 |
InvocationHandlerAdapter | 调用处理适配器,用于将自定义的调用处理逻辑适配到代理机制中。 |
NullInvoker | 空值调用器 |
XmlRpcInvoker | 通过 XML-RPC 协议调用远程服务。 |
实现类 | 说明 |
---|
PatternFilter | 通过正则表达式匹配方法名过滤 |
ReturnTypeFilter | 通过返回值类型过滤 |
SimpleFilter | 通过指定的方法名过滤 |