虫洞java_java – 使用AspectJ实现虫洞模式

确实在

AspectJ in Action中有一个例子.如果你看一下

table of contents,你会注意到第12.2章正是你要找的.买这本书是个好主意.我可以热情地推荐它.因为我不确定是否可以复制&粘贴本书的部分内容,我将在此处引用模板:

public aspect WormholeAspect {

pointcut callerSpace() :

;

pointcut calleeSpace() :

;

pointcut wormhole(, ) :

cflow(callerSpace()) &&

calleeSpace();

// advice to wormhole

before(, ) :

wormhole(, )

{

... advice body

}

}

在TheServerSide.com上有一个旧的article by Laddad,有一个更具体的例子.它与书中的不同,但相似.

正如您所看到的,在AspectJ中很容易做到,因为您有cflow()切入点.我从未使用过Guice,但其AOP introduction页面提到它们的实现是AOP Alliance规范的一部分.看看AOP Alliance API,没有什么看起来像cflow()切入点,它是围绕构造函数&方法调用加上字段访问.

那么如果你想避免在所有层中通过参数,你可以在Spring(没有AspectJ)或Guice中做什么?显而易见的解决方案是由调用者声明和管理(即分配,但也清除)并由被调用者访问的ThreadLocal变量.这不是很好,只是一种解决方法,以免膨胀API.但它要求来电者和被叫者都对他们想要分享的内容和方式有共同的理解.在某种程度上,这种实现更多的是反模式而不是模式.如果可以的话,使用AspectJ以便以一种干净和模块化的方式解决这个问题,将问题封装在一个模块(方面)中.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值