是否有可能确定哪些方面挂接到给定类并获得对其实例的访问权限?
类似于:
Foo foo = new Foo();
List<Object> aspects = getAllAspectsOf(foo);
最佳答案
首先,您很可能无法使用现有的 Aspect API 进行任何此类监控,因为 Aspect 包装器会拦截具有不绑定(bind)到任何特定组件的特定目的的调用,因此不会有任何检测拦截方面的自然方法。
也就是说 - 可能有一种方法可以将方面包装在某种策略类中,但是,维护它的工作量将非常大。
http://www.eclipse.org/aspectj/doc/released/faq.php#q:benefits
切面通常被描述为“在其他代码之上”或“与其他代码交织在一起”,即在运行时或构建时。
因此,鉴于此实现方面的范例,您的代码通常不会“意识到”任何此类面向方面的功能。
但是,如果您想要可追踪的方面,您可以使用标准 java 和依赖注入(inject)来实现一些“类似”方面的特性 - 也就是说,通过在运行时加载注入(inject)的模块来实现一些交叉 -削减一个方面将实现的功能......但是,我怀疑,如果你真的在做严肃的面向方面的代码,那么这种方法将达不到你的面向方面的要求。
关于java - 确定哪些方面 Hook 到给定的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8683103/