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

mib*_*lma 7 java aop aspectj

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

就像是:

Foo foo = new Foo();
List<Object> aspects = getAllAspectsOf(foo);
Run Code Online (Sandbox Code Playgroud)

jay*_*100 2

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

也就是说,可能有一种方法可以将各个方面包装在某种策略类中,但是,维护这一点的工作量将非常大。

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

方面通常被描述为“位于其他代码之上”或“与其他代码交织在一起”,即在运行时或构建时。

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

因此,考虑到这种方面实现的范例,您的代码通常不会“意识到”任何此类面向方面的功能。

但是,如果您想要可跟踪的切面,您可以使用标准 java 和依赖项注入来实现一些“类似”切面的功能- 也就是说,通过在运行时加载注入的模块来实现切面将实现的一些横切功能...但是,我怀疑,如果您真的在做严肃的面向方面的代码,那么这种方法将达不到您面向方面的要求。