java - 确定哪些方面 Hook 到给定的类

标签 java aop aspectj

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

类似于:

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

最佳答案

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

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

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

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

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

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

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

关于java - 确定哪些方面 Hook 到给定的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8683103/

相关文章:

java - 抽象父类(super class)中实现的超接口(interface)方法的方面

java - 如何在正则表达式中写可选词?

java - 在 Java 中调整图像大小

c# - 如何为 Unity 中的所有注册类型配置日志拦截器?

java - Spring AOP 编程时出现奇怪的异常

java - 如何使用 AOP 在 JPA 实体中建议/切入点 setter ?

spring - 在 Java 7 中使用 AspectJ AOP 时出错

java - Hibernate SQL异常

java - 在 viewPager 中的 2 个 fragment 之间共享 listView

java - 我的aspectj模式的方法不起作用