动态切入点表达式。

时间:2012-03-27 23:18:59

标签: java spring spring-aop pointcuts

就是这样,我一直致力于使用AOP的监控解决方案,可以扩展到任何类型的组件。我会试着打破我在各个方面的担忧。

这个想法:
有一种机制允许基于类型的动态切入点表达式定义,即Spring bean。

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

问题:
这个问题是,在这一点上,我无法重新定义或使用任何Pointcut,因为Spring AOP进程已经创建了代理对象。

我尝试了什么:
•实现了我自己的Pointcut,Advisor和Advice,它与我的bean列表进行了比较,然而,它被忽略了。
•实现了PointcutFactoryBean,它将为已经声明的Advisor提供切入点。
•尝试修改已声明的Pointcut(基于beanIds添加新表达式)并将其与BeanNameAutoProxyCreator相关联,并使用与此Pointcut关联的Interceptor。所以它有,例如:
bean(bean1)|| bean(otherBean)等等。

通过所有这些尝试,我偶然发现了同样的问题,所有内容都已经定义并且不可更改。

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

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

提前多多感谢!

1 个答案:

答案 0 :(得分:1)

能够通过创建与AOP相关的每个类的自己的实现来做到这一点:

  • 切入点。
  • MethodMatcher。
  • ParentsAdvisor。
  • ClassFilter。

使用Spring直接实现它们,在Spring上下文中添加一个空的aop:config元素足以使这个工作完美无瑕。

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

谢谢!