Determine which aspects hook into a given class

Is it possible to determine which aspects hook into a given class and to gain access to their instances?

Something like:

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

First, you most likely would not be able to do any such monitoring using existing Aspect APIs, because Aspect wrappers that intercept calls with the specific purpose of NOT being tied to any one particular component, so there would not be any natural way to detect intercepting aspects.

That said - there might be a way you could wrap aspects inside of some sort of strategy class, however, the amount of work to maintain this would be quite significant.

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

Aspects are often described as "being on top of" or "woven in with" your other code, ie at runtime or build time.

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

Thus, your code would not typically be "aware" of any such aspect oriented features, given this paradigm for the implementation of aspects.

However, if you wanted traceable aspects , you could implement some Aspect "like" features using standard java and dependency injection - that is, by loading injected modules at runtime which implement some of the cross-cutting functionality that an aspect would implement ... but, i suspect, if you are really doing serious aspect oriented code, such an approach would fall short of your aspect oriented requirements.


I don't think that you can, although, it would be technology dependent. As far as I know, there is no way with aspectj or cglib to track and access the advice woven around a class. You could create your advice such that it will add a reference to itself to some thread local structure that can be accessed by the advised class. However, it would seem to defeat the purpose of aspects as a solution to cross cutting concerns if you couple your target classes to them.


I guess to get some limited information it would need to change the weaver so it saves some log of its work into the augmented class, so you can later read it. But do not expect much - AFAIK aspects may not exist as no run-time types at all. I wonder - is there any framework doing that?

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

上一篇: Yii与其他表的条件关系记录

下一篇: 确定哪些方面钩入给定的类