我正在使用Spring的@Configuration
,我注意到@Bean
没有使用JMX注册。
bean连接为
@Bean
protected CountingHttpInterceptor countingHttpInterceptor() {
return new CountingHttpInterceptor();
}
,类定义是
@ManagedResource
public class CountingHttpInterceptor implements HttpRequestInterceptor, HttpResponseInterceptor { /* code here*/ }
在构建基于XML的主应用程序上下文之后处理此@Configuration
文件,并且没有机会参与使用XML bean定义激活的发现过程({{1}和炒的)。
我如何从org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource
文件中启用JMX?
更新:xml配置
@Configuration
答案 0 :(得分:4)
尽管存在基于@Configuration
的方法的诱惑,但使用XML配置仍然可以做得更好。特别是基于命名空间的配置,例如<context:mbean-export>
。这些基本上代表了由交互对象的复杂排列组成的“宏”。
现在,你可以在你的@Configuration
课程中复制这个逻辑,但它确实比它的价值更麻烦。相反,我建议将这些系统级的东西放入XML中,然后从@Configuration
类中导入它:
@ImportResource("/path/to/beans.xml")
public class MyConfig {
@Bean
protected CountingHttpInterceptor countingHttpInterceptor() {
return new CountingHttpInterceptor();
}
}
然后在/path/to/beans.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<context:mbean-export/>
</beans>
答案 1 :(得分:2)
你拥有的一切都是正确的。在@Configuration类中,您需要再添加一个注释来导出MBean,@ EnableMBeanExport。
您的配置类看起来像这样......
@Configuration
@EnableMBeanExport
public class SpringConfiguration {
@Bean
protected CountingHttpInterceptor countingHttpInterceptor() {
return new CountingHttpInterceptor();
}
}