[英]Dynamic Pointcut expression.
事情就是这样,我一直在研究带有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问题,例如编织等等。总之,我正在寻找一种方法来创建切入点表达式并将其分配给应用程序启动时的切入点,考虑所有的豆子。
希望我很清楚,如果没有,请告诉我,我会尽力提供更多详细信息或代码。
在此先多谢!
通过创建与AOP相关的每个类的我自己的实现,可以做到这一点:
并直接使用Spring实例化它们,在Spring上下文中添加一个空的aop:config元素就足以使其完美运行。
如果有人需要更多信息,请告诉我。
谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.