对于每个Bean的注册,MBeanExporter 在后台委派给了 ObjectNamingStrategy 的一个实现来获取 ObjectName。
    缺省实现是 KeyNamingStrategy,它将默认使用 beans 上 Map 的键值作为 ObjectName。
    此外,KeyNamingStrategy 可以将该键值与 Properties 文件中的一个条目对应,以此解析 ObjectName。
    除了 KeyNamingStrategy 之外,Spring还提供了另外两个 ObjectNamingStrategy 的实现:
    基于bean的JVM标识构建 ObjectName 的 IdentityNamingStrategy;
    利用源代码级元数据获取 ObjectName 的 MetadataNamingStrategy。
    
      你可以配置你自己的 KeyNamingStrategy 实例,配置它从一个 Properties 实例读取 ObjectName,而不是用Bean的键值。
      KeyNamingStrategy 首先会用bean的键值试图从 Properties 中定位一个条目。
      假若没有找不到对应的条目,或者 Properties 实例为 null,最后才使用Bean的键值作为 ObjectName。
      
      以下代码显示了关于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>
      这个 KeyNamingStrategy 实例配置了一个 Properties 实例,而这个 Properties 实例由mapping属性和mappingLocations属性所指定的路径定位到的 Properties 文件合成。
      在这个配置里,由于 Properties 实例有个键值对应该Bean的键值,因此 testBean 的 ObjectName 将被指定为 bean:name=testBean1。
      
      假若没有任何条目可以从 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>
      假若没有 objectName 在 ManagedResource里提供,那么一个 ObjectName 将以以下格式创建: 
      [fully-qualified-package-name]:type=[short-classname],name=[bean-name]。
      例如,对于以下的Bean,产生的 ObjectName 将是 com.foo:type=MyClass,name=myBean。
      
<bean id="myBean" class="com.foo.MyClass"/>
      如果你至少在使用Java 5,那么就可以使用一个方便的 MBeanExporter 子类, AnnotationMBeanExporter。
      当定义一个这个子类的实例时,由于他将始终使用基于注解的标准Java元数据(自动探测也将始终被激活),namingStrategy 和 attributeSource 的配置也不再需要了。
      
<context:mbean-export/>
      必要时,你可以提供某个MBean服务器的引用,同时 defaultDomain 属性
      (AnnotationMBeanExporter的一个属性)接受产生的MBean
      ObjectNames域名的替代值。
      这被用于替代前面章节 MetadataNamingStrategy 提及的完整限定包名。
      
<context:mbean-export server="myMBeanServer" default-domain="myDomain"/>.