在对象(“t​​his”或“target”)被垃圾收集之前丢弃方面实例

时间:2013-04-03 11:12:25

标签: aspectj

我知道方面实例(由于perthis或pertarget)会随着对象自动处理,但我想知道是否有一种方法可以在对象生命周期的任何一点以编程方式执行此操作。目的是对方面代码的开销进行更细粒度的控制。

考虑以下示例,我想检查每个帐户是否在第一次提款前有初始存款。请注意,一旦我观察到第一次存款,就不需要进一步保留方面实例:

aspect accounting perthis (execution(Account.new(..))) {    

after () : execution(* Account.deposit(..))
{
         //fine... discard aspect instance
}   

before () : execution(* Account.withdraw(..))
{
    assert first_deposit:"Cannot withdraw before a first deposit";  
}

1 个答案:

答案 0 :(得分:0)

你确定方面本身确实是问题吗?如果方面实例不包含太多状态,则它将相当小。如果你的方面实例确实包含大量的状态,你最好只是null在方面中的字段而不是试图断开方面与实例的连接。