请考虑一下:
public class A
{
private B bMemeber;
private Properties myProperties;
}
和
public class B {
private Object field;
public void setField(Object o){...}
}
我有一个方面
@After("execution(* B.setField(..)) &&! within(PropertiesAspect)")
public void afterSetField(JoinPoint jp)
{....}
我的问题是:是否可以在B
中使用aspectj获取封闭类型afterSetField
,因为我需要测试A
对象中包含的某些属性
答案 0 :(得分:2)
你想要的东西不容易实现,因为它不是AOP的制作方式。 B类的实例不知道它是分配给任何其他类的成员还是任何集合或数组的一部分。 JVM垃圾收集器为内部目的引用计数(在不再引用对象后释放内存),但这不是您从一个方面可以访问的内容。您可以使用AspectJ做什么
set()
)切入点或者读取该成员(get()
切入点),就会set()
,仅在引用的对象本身中触发。{/ li>
我不确定你想要什么具有任何实际意义,但你可以用一些开销来做这样的手动参考簿记:
set()
切入点截取它并通过将其放入由该方面维护的集合中来记住它。execution()
切入点中,查看相关对象是否在内部集合中,从集合中检索有关拥有对象的信息,并随意使用它。我希望即使没有示例代码,这种解释也是可以理解的。随意提出后续问题。