确定哪些方面钩入给定的类

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

就像是:

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

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

这就是说 - 可能有一种方法可以将某些策略类中的方面包装起来,但是,维护这些方面的工作量将非常重要。

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

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

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

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

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


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


我想得到一些有限的信息,它需要改变织布工,以便将其工作的一些日志保存到增强类中,以便稍后可以读取它。 但是,不要期望太多 - AFAIK方面可能根本就不存在运行时类型。 我想知道 - 有没有框架在做这件事?

链接地址: http://www.djcxy.com/p/56907.html

上一篇: Determine which aspects hook into a given class

下一篇: Rails: Migration and database differences between development and production