Java 确定哪些方面与给定类挂钩

Java 确定哪些方面与给定类挂钩,java,aop,aspectj,Java,Aop,Aspectj,是否可以确定哪些方面挂接到给定的类中并获得对其实例的访问 比如: Foo foo = new Foo(); List<Object> aspects = getAllAspectsOf(foo); Foo-Foo=new-Foo(); 列表方面=getAllAspectsOf(foo); 我不认为你可以,不过,这取决于技术。据我所知,aspectj或cglib无法跟踪和访问围绕类编写的建议。您可以创建您的建议,以便它将自身的引用添加到建议类可以访问的某个线程本地结构中。但是,如果您

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

比如:

Foo foo = new Foo();
List<Object> aspects = getAllAspectsOf(foo);
Foo-Foo=new-Foo();
列表方面=getAllAspectsOf(foo);

我不认为你可以,不过,这取决于技术。据我所知,aspectj或cglib无法跟踪和访问围绕类编写的建议。您可以创建您的建议,以便它将自身的引用添加到建议类可以访问的某个线程本地结构中。但是,如果您将目标类与方面耦合,则似乎无法实现方面作为跨领域问题解决方案的目的。

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

这就是说,可能有一种方法可以将方面封装到某种策略类中,但是,维护这一类的工作量将非常大

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

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


然而,如果您想要可跟踪的方面,您可以使用标准java和依赖项注入实现一些方面“类似”的特性——也就是说,通过在运行时加载注入的模块,这些模块实现方面将实现的一些横切功能。。。但是,我怀疑,如果您真的在编写面向方面的代码,那么这种方法将无法满足面向方面的需求

我猜要获得一些有限的信息,它需要来更改weaver,这样它就可以将一些工作日志保存到增强类中,以便您以后可以阅读它。但是不要期望太多——AFAIK方面可能根本不存在,因为根本没有运行时类型。我想知道-是否有框架可以做到这一点?

我不打算将目标类与方面耦合。相反,我想为目标类提供一个strategy类,然后strategy类需要访问在目标类上定义的方面以注册一些侦听器。目标类未被修改。。。只有strategy类才知道这个方面。@mibollma:您能让建议注册到侦听器中,这样您就不用向目标实例提供策略了吗?我不确定您想要实现什么。首先,作为foo的一个方面意味着什么?也许您的意思是,在执行通知时,“foo”将绑定到“this()”切入点。由于切入点可以动态绑定,因此任何此类getAllAspectsOf(foo)方法都将取决于哪个线程和cflow是什么。我认为你应该考虑使用perthis或pertarget。然后,对于给定的Foo实例,可以调用MyAspect.aspectOf(Foo)。看见