1

事情是这样的,我一直在使用 AOP 开发一个监控解决方案,它可以扩展到任何类型的组件。我会尽量打消我对某些方面的担忧。

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

我所做的:
创建了一个实现 ApplicationContextAware 的组件,它检查 Spring Context 并列出所有应考虑用于切入点的 bean 类型和名称。

问题:
问题在于,此时我无法重新定义或使用任何切入点,因为 Spring AOP 进程已经创建了代理对象。

我尝试了什么:
• 实现了我自己的切入点、顾问和建议,它与我的 bean 列表进行比较,但是,它被忽略了。
• 实现了一个PointcutFactoryBean,它将为已声明的顾问提供切入点。
• 尝试修改已声明的切入点(添加基于 beanId 的新表达式)并将其与 BeanNameAutoProxyCreator 相关联,并带有与此切入点相关联的拦截器。这样它就有了,例如:
bean(bean1) || bean(otherBean) 等等。

通过所有这些尝试,我偶然发现了同样的问题,一切都已经定义并且无法从上下文中改变。

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

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

提前非常感谢!

4

1 回答 1

1

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

  • 切入点。
  • 方法匹配器。
  • 家长顾问。
  • 类过滤器。

并且直接使用 Spring 实例化它们,在 Spring 上下文中添加一个空的 aop:config 元素就足以让它完美地工作。

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

谢谢!

于 2012-04-20T15:43:59.057 回答