博客
关于我
使用Spring AOP应该注意的一个小细节
阅读量:649 次
发布时间:2019-03-15

本文共 1073 字,大约阅读时间需要 3 分钟。

在实际项目中,当我们在Spring的配置文件中添加<aop:aspectj-autoproxy proxy-target-class="true">标签时,这实际上意味着我们希望切入点是基于实现类的代理,而不是基于接口的代理。这一设置会直接影响我们对ProxyEnhancer这两个概念的理解和应用。

<aop:aspectj-autoproxy proxy-target-class="true">标签的作用是告知Spring绕collections(如Interceptors)应该针对指定的实现类进行自动化代理,而不是简单地基于接口进行代理。这种机制与默认的基于接口的代理模式有明显的区别,主要体现在实现类的选择上。

Proxy和Enhancer的区别

在这个上下文中,ProxyEnhancer实际上是指两种不同的绕collection机制。Proxy(也叫切入点代理)是一种基于动态代理的方式,它会根据目标类的接口创建一个代理类。默认的Proxy模式会自动为我们创建一个合成对象,它会基于指定的接口定义绕集合的逻辑。

Enhancer(增强器)则是一种通过增强代理机制来起作用的方式。与Proxy不同,Enhancer并不简单地创建一个新的合成对象,它实际上会动态地修改目标对象本身,注入拦截逻辑,而不是通过创建新的代理类来实现拦截功能。这样做的好处是能够在不改变目标对象本身的情况下,通过动态插入代码的方式来实现对目标对象的增强。

性能表现上的区别

从性能方面来看,ProxyEnhancer也有其独特之处。Proxy模式通常会因为创建了一个独立的合成对象而存在一定的性能开销,而Enhancer通过动态插入代码的方式,不会显著增加目标对象的执行时间。因此,在需要更高效的拦截逻辑实现的情况下,Enhancer往往会是更好的选择。

如何选择两者的结合方式

在实际Spring配置中,我们需要根据具体的场景和需求来决定使用Proxy还是Enhancer。如果我们需要快速实现一个基于接口的简单拦截逻辑,那么Proxy模式是理想选择。而如果我们需要在不改变目标对象本身的同时,实现更加复杂的逻辑扩展,那么Enhancer则是更好的选择。

通过理解和配置<aop:aspectj-autoproxy proxy-target-class="true">标签,我们能够更灵活地控制Spring AOP的代理模式,从而实现更精确的功能需求。对于实际项目来说,理解这两种绕collection机制的区别,将有助于我们做出更加合适的技术选择。

转载地址:http://qdvmz.baihongyu.com/

你可能感兴趣的文章
php端口直驱网络打印机,能自定义格式
查看>>
s3c2440 ads程序移植到keil中(一) 初步完成
查看>>
工程经济—建设工程定额
查看>>
工程经济—工程量清单编制
查看>>
1Z204050、施工质量不合格的处理
查看>>
1Z308020、民事诉讼制度
查看>>
JSP中的九大内置对象
查看>>
【字节网盘】九款超好看不同页面404源码
查看>>
两款404页面自动跳转源码html
查看>>
二改广告横幅在线制作源码 美化版
查看>>
服饰贴图定制小程序V1.2.4安装更新一体包+小程序前端
查看>>
一款好看新颖的404页面源码
查看>>
创意沙雕黑色蝙蝠侠/小丑动态404页面源码
查看>>
使用Mac OS X如何开启和配置防火墙
查看>>
格式化Mac硬盘---DoYourData Super Eraser安全、快速
查看>>
MacOS磁盘分区出错的解决办法
查看>>
MacOS 应对系统无响应的方法
查看>>
使用KeyShot调整一个场景中的照明亮度
查看>>
Mac隐藏辅助功能|自定义苹果Mac显示器
查看>>
ActivityNotFoundException异常错误
查看>>