如何从Spring AOP处理范围中排除bean /包

时间:2013-02-07 06:36:55

标签: java spring jmx spring-aop spring-integration

如何从 Spring AOP 处理范围中排除bean或包?

我在 JBoss 上修复 Spring Integration JMX 支持问题时遇到了这个问题。

作为开发环境,我们使用 Spring 3.2.0.RELEASE Spring Integration 2.2.0.RELEASE Jboss AS 7.1.1

启用 Spring Integration JMX 时,实际上是在创建 IntegrationMBeanExporter ,它从底层 ApplicationContext中提取所有 Spring Integration 相关bean 并创建适当的托管 MBeans 。用于将创建的 MBean 分配给所需的服务器 MBeanServer ,必须在 ApplicationContext 中定义,这通常使用标准 MBeanServerFactoryBean ,返回与平台相关的 MBeanServer

问题出现了,因为我们使用 Spring AOP 进行了一些增强操作,而 AOP后期处理机制正在尝试处理平台 mbeanServer 像常规 bean 一样,针对内部切入点验证初始平台ClassLoader ,最终无法做到。

这似乎与https://jira.springsource.org/browse/SPR-9335类似,但具有通用细节。

作为解决方案,我阻止 spring 处理 mbeanServer 作为ApplicationContext的一部分:

<bean id="jmxIntegration" scope="singleton" class="org.springframework.integration.monitor.IntegrationMBeanExporter">
    <property name="server" value="#{ T(org.springframework.jmx.support.JmxUtils).locateMBeanServer() }"/>
</bean>

这很有效,但这似乎是一个更通用的问题, AOP

另外有趣的是,春天的 MBeanExporter 也指 JmxUtils 而不是上下文的 MBeanServer

0 个答案:

没有答案