事情就是这样,我一直在研究带有AOP的监视解决方案,该解决方案可以扩展到任何类型的组件。我会尽力消除我在某些方面的担忧。

这个想法:
有一种机制可以根据类型(Spring Bean)来定义动态切入点表达式。

我做了什么:
创建一个实现ApplicationContextAware的组件,该组件检查Spring Context并列出Pointcut应考虑的所有bean类型和名称的列表。

问题:
这样做的问题是,由于Spring AOP进程已经创建了代理对象,因此我目前无法重新定义或使用任何切入点。

我试过的
•实现了我自己的Pointcut,Advisor和Advice,可与我的bean列表进行比较,但是被忽略了。
•实现了PointcutFactoryBean,它将是为已经声明的Advisor提供Pointcut的对象。
•尝试修改已经声明的切入点(基于beanId添加新表达式),并将其与BeanNameAutoProxyCreator关联,并与该切入点相关联的拦截器。这样,例如:
bean(bean1)|| bean(otherBean),依此类推。

经过所有这些尝试,我偶然发现了一个相同的问题,所有内容都已经定义好,并且在上下文中是不可更改的。

问题:
Spring AOP甚至可能做到这一点?我们不想涉及任何AspectJ问题,例如编织等等。
总而言之,我正在寻找一种创建切入点表达式并将其分配给应用程序启动时的切入点的方法,同时考虑所有bean。

希望我很清楚,如果没有,请告诉我,我会尽力提供更多详细信息或代码。

在此先多谢!

最佳答案

通过创建与AOP相关的每个类的我自己的实现,可以做到这一点:


切入点。
方法匹配器。
家长顾问。
ClassFilter。


并直接使用Spring实例化它们,在Spring上下文中添加一个空的aop:config元素足以使此工作正常进行。

如果有人需要更多信息,请告诉我。

谢谢!

关于java - 动态切入点表达式。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9899086/

10-08 21:04