在后台,MBeanExporter
委派 ObjectNamingStrategy
的一个实现去获取正在注册的每个bean的ObjectName
。
缺省的实现是 KeyNamingStrategy
,它缺省用 beans
Map
的键作为 ObjectName
。
此外,KeyNamingStrategy
能把beans
Map
的键映射为一个 Properties
文件中的实体,以此来决定 ObjectName
。
除了 KeyNamingStrategy
之外,Spring提供了另外两个 ObjectNamingStrategy
的实现:
IdentityNamingStrategy
构造一个 ObjectName
,
这是基于JVM识别的bean;MetadataNamingStrategy
是用源代码级元数据获取 ObjectName
。
可以配置你自己 KeyNamingStrategy
实例,配置它从一个 Properties
的实例中读取 ObjectName
,而不是用bean的键去读。
KeyNamingStrategy
会试着用与bean键相应的键在 Properties
中查找一个实体。
如果没有发现任何实体或是 Properties
实例为 null
,就用这个bean的键。
下面代码展示了一个 KeyNamingStrategy
配置的例子:
<beans> <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"> <property name="beans"> <map> <entry key="testBean" value-ref="testBean"/> </map> </property> <property name="namingStrategy" ref="namingStrategy"/> </bean> <bean id="testBean" class="org.springframework.jmx.JmxTestBean"> <property name="name" value="TEST"/> <property name="age" value="100"/> </bean> <bean id="namingStrategy" class="org.springframework.jmx.export.naming.KeyNamingStrategy"> <property name="mappings"> <props> <prop key="testBean">bean:name=testBean1</prop> </props> </property> <property name="mappingLocations"> <value>names1.properties,names2.properties</value> </property> </bean </beans>
用一个 Properties
的实例来配置一个 KeyNamingStrategy
的实例,
这个 Properties
的实例是由映射属性定义的 Properties
实例和由映射属性定义的路径中的属性文件的内容合并起来的。
这个配置中,给bean testBean
的 ObjectName
值为 bean:name=testBean1
,
因为这个实体在 Properties
的实例中,这个实例有一个与bean的键相对应的键。
如果在 Properties
实例中没有找到实体,则bean的键名将用作 ObjectName
的值。
MetadataNamingStrategy
使用每个bean属性
ManagedResource
的 ObjectName
属性来创建 ObjectName
。
下列代码展示了 MetadataNamingStrategy
的配置:
<beans> <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"> <property name="beans"> <map> <entry key="testBean" value-ref="testBean"/> </map> </property> <property name="namingStrategy" ref="namingStrategy"/> </bean> <bean id="testBean" class="org.springframework.jmx.JmxTestBean"> <property name="name" value="TEST"/> <property name="age" value="100"/> </bean> <bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy"> <property name="attributeSource" ref="attributeSource"/> </bean> <bean id="attributeSource" class="org.springframework.jmx.export.metadata.AttributesJmxAttributeSource"/> </beans>