当前位置: 首页 > news >正文

commons-proxy

概述

用于动态代理的 Java 库。它提供了一种简单的方式来创建代理对象,这些代理对象可以在运行时拦截和修改方法调用。

maven依赖

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-proxy -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-proxy</artifactId><version>1.0</version>
</dependency>
<!--  cglib代理需要   -->
<dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>2.1_3</version><optional>true</optional>
</dependency>
<!-- javassist代理需要  -->
<dependency>
<groupId>jboss</groupId><artifactId>javassist</artifactId><version>3.0</version><optional>true</optional>
</dependency>
<!-- ExecutorInterceptor需要  -->
<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();//Cglib代理对象工厂DemoServiceImpl invokerProxy = (DemoServiceImpl) factory.createDelegatorProxy(new BeanProvider(DemoServiceImpl.class),new Class[]{DemoServiceImpl.class});System.out.println(invokerProxy.get());
  • 对象的拦截器代理对象
        ProxyFactory factory = new CglibProxyFactory();//Cglib代理对象工厂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

常用接口可用实现类

  • ObjectProvider 对象提供器
实现类说明
BeanProvider指定Class获取对象
CloningProvider通过指定对象克隆获取对象
ConstantProvider通过指定对象赋值获取对象
NullProvider获取null值对象
SingletonProvider单例对象提供器
BurlapProvider通过Burlap远程获取对象
HessianProvider通过Hessia远程获取对象
JaxRpcProvider通过JaxRpc远程获取对象
RmiProvider通过Rmi远程获取对象
SessionBeanProvider通过EJB远程获取对象
  • Interceptor 拦截器
实现类说明
ExecutorInterceptor多线程处理拦截器
FilteredInterceptor过滤器拦截器,通过指定过滤器拦截需要处理的方法
LoggingInterceptor日志拦截器,通过日志输出方法执行相关信息
SerializingInterceptor序列化拦截器,序列化复制对象处理
  • Invoker 调用器
实现类说明
DuckTypingInvoker通过动态调用目标对象的方法集合判断其类型,而非依赖静态继承关系或显式接口。
InvocationHandlerAdapter调用处理适配器,用于将自定义的调用处理逻辑适配到代理机制中。
NullInvoker空值调用器
XmlRpcInvoker通过 XML-RPC 协议调用远程服务。
  • MethodFilter
实现类说明
PatternFilter通过正则表达式匹配方法名过滤
ReturnTypeFilter通过返回值类型过滤
SimpleFilter通过指定的方法名过滤
http://www.dtcms.com/a/410920.html

相关文章:

  • 机器学习实战第十五章 RNN处理序列
  • pinme 个人开发者免费部署静态资源的工具
  • fullpage网站怎么做做网站设计的平台
  • 如何看网站的流量宝塔建站网址
  • Python如何进行GCM加密
  • rabbitmq简介与基本使用
  • LlamaIndex智能体Agents开发全攻略
  • c++如何实现高性能线程安全队列
  • java-Map集合
  • Web开发:ABP框架14——多个实现,一个接口的高端写法
  • Springboot社区集市摆摊管理系统jv9kp(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 国产手机百花齐放,如何化解“选择困难症”?
  • 百度主机做视频网站怎么样淘宝客是以下哪个网站的会员简称
  • AI 算力加速指南
  • 【財運到】股票期货盯盘助手-自选股界面介绍
  • 架构入门系列:用数学公式估算服务器数量的实战指南
  • Redis02-Ehcache缓存
  • 结合 SSH 22 + 2222 备用端口 + 临时保护 + 长期守护 + 防火墙 的终极一行命令版本
  • 使用虚幻引擎时间轴制作一个弹跳小球
  • 网站推广和精准seo深圳网站设计兴田德润i简介
  • 从比分到直播流畅度:API 在体育观赛中的关键作用
  • JavaScript又忘了,忘了?太正常了!忘了?太正常了!重新上路:
  • 全新一代北斗三号短报文通信SoC芯片在北斗规模应用国际峰会发布
  • 佛山做企业网站的公司专业设计网站有哪些
  • 户用储能微型逆变器计量电表防逆流
  • 通过手动安装本地部署live-torrent (影视搜索,云播客户端)
  • 学做立体书的网站网站怎么做gps定位
  • 【实时Linux实战系列】实时系统的现场变更与灰度发布
  • 做个简单网站大概多少钱it培训机构排名北京
  • Spring Boot 自动配置之 TaskScheduler