21.4.控制bean的 ObjectName
21.4. 控制bean的 ObjectName
在后台,MBeanExporter
委派 ObjectNamingStrategy
的一个实现去获取正在注册的每个bean的ObjectName
。 缺省的实现是 KeyNamingStrategy
,它缺省用 beans
Map
的键作为 ObjectName
。 此外,KeyNamingStrategy
能把beans
Map
的键映射为一个 Properties
文件中的实体,以此来决定 ObjectName
。 除了 KeyNamingStrategy
之外,Spring提供了另外两个 ObjectNamingStrategy
的实现: IdentityNamingStrategy
构造一个 ObjectName
, 这是基于JVM识别的bean;MetadataNamingStrategy
是用源代码级元数据获取 ObjectName
。
21.4.1. 从Properties
中读取ObjectName
可以配置你自己 KeyNamingStrategy
实例,配置它从一个 Properties
的实例中读取 ObjectName
,而不是用bean的键去读。 KeyNamingStrategy
会试着用与bean键相应的键在 Properties
中查找一个实体。 如果没有发现任何实体或是 Properties
实例为 null
,就用这个bean的键。
下面代码展示了一个 KeyNamingStrategy
配置的例子:
<beans> <bean id="exporter"> <property name="beans"> <map> <entry key="testBean" value-ref="testBean"/> </map> </property> <property name="namingStrategy" ref="namingStrategy"/> </bean> <bean id="testBean"> <property name="name" value="TEST"/> <property name="age" value="100"/> </bean> <bean id="namingStrategy"> <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
的值。
21.4.2. 使用 MetadataNamingStrategy
MetadataNamingStrategy
使用每个bean属性 ManagedResource
的 ObjectName
属性来创建 ObjectName
。 下列代码展示了 MetadataNamingStrategy
的配置:
<beans> <bean id="exporter"> <property name="beans"> <map> <entry key="testBean" value-ref="testBean"/> </map> </property> <property name="namingStrategy" ref="namingStrategy"/> </bean> <bean id="testBean"> <property name="name" value="TEST"/> <property name="age" value="100"/> </bean> <bean id="namingStrategy"> <property name="attributeSource" ref="attributeSource"/> </bean> <bean id="attributeSource" /> </beans>