0

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

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

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

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

问题出现了,因为我们使用Spring AOP进行一些增强操作,而AOP 后处理机制试图像普通bean一样处理平台mbeanServer,验证初始平台 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

4

0 回答 0