确定哪些方面挂钩到给定的类

时间:2011-12-30 19:17:22

标签: java aop aspectj

是否可以确定哪些方面挂钩到给定的类并获得对其实例的访问权?

类似的东西:

Foo foo = new Foo();
List<Object> aspects = getAllAspectsOf(foo);

3 个答案:

答案 0 :(得分:2)

我不认为你可以,但它会依赖于技术。据我所知,aspectj或cglib无法跟踪和访问围绕类编织的建议。您可以创建您的建议,以便它将自己的引用添加到某个线程本地结构,该结构可以由建议的类访问。但是,如果将目标类与它们结合起来,它似乎会破坏方面的目的,作为解决交叉问题的解决方案。

答案 1 :(得分:2)

首先,您很可能无法使用现有的Aspect API进行任何此类监控,因为 Aspect包装器拦截了调用,其特定目的是将NOT绑定到任何一个特定组件,因此不会任何自然的方式来检测拦截方面。

那就是说 - 可能有一种方法可以将某些策略类包含在某些策略类中,但是,维护它的工作量非常大。

http://www.eclipse.org/aspectj/doc/released/faq.php#q:benefits

方面通常被描述为“在其他代码之上”或“编织”,即在运行时或构建时。

http://asm.ow2.org/users.html

因此,鉴于这种方面实现的范例,您的代码通常不会“意识到”任何此类面向方面的特征。

但是,如果你想要可跟踪的方面,你可以使用标准的java和依赖注入来实现一些Aspect“like”特性 - 也就是说,通过在运行时加载注入的模块来实现一些交叉削减一个方面可以实现的功能......但是,我怀疑,如果你真的在做严肃的面向方面的代码,这样的方法将达不到你的面向方面的要求。

答案 2 :(得分:0)

我想要获得一些有限的信息,它需要来更改编织器,以便将其工作日志保存到增强类中,以便稍后阅读。但是不要期望太多 - AFAIK方面可能不存在,因为根本没有运行时类型。我想知道 - 有没有任何框架呢?