2016-01-14 24 views
1

在项目中存在以下管理操作:如何公开MBean中描述的属性

@ManagedOperation(description = "Some description") 
@ManagedOperationParameters({ 
     @ManagedOperationParameter(name = "key", description = "Some description"), 
}) 
public void foo(String key) { 
    // some logic 
} 

也有是可以在Spring上下文中的美元符号和方括号它使用一个属性:

"${some.property.key}" 

是否可以在托管操作注释描述中使用上述属性键的值?喜欢的东西:

@ManagedOperationParameter(name = "key", 
    description = "Some description, please note that the key is ${some.property.key}") 

回答

1

不乱的开箱即用,但它很容易定制...

public class CustomAttributeSource extends AnnotationJmxAttributeSource implements EmbeddedValueResolverAware { 

    private StringValueResolver embeddedValueResolver; 

    @Override 
    public void setEmbeddedValueResolver(StringValueResolver resolver) { 
     this.embeddedValueResolver = resolver; 
    } 

    @Override 
    public ManagedAttribute getManagedAttribute(Method method) throws InvalidMetadataException { 
     ManagedAttribute managedAttribute = super.getManagedAttribute(method); 
     if (this.embeddedValueResolver != null) { 
      managedAttribute 
        .setDescription(this.embeddedValueResolver.resolveStringValue(managedAttribute.getDescription())); 
     } 
     return managedAttribute; 
    } 

    @Override 
    public ManagedOperation getManagedOperation(Method method) throws InvalidMetadataException { 
     ManagedOperation managedOperation = super.getManagedOperation(method); 
     if (this.embeddedValueResolver != null) { 
      managedOperation 
        .setDescription(this.embeddedValueResolver.resolveStringValue(managedOperation.getDescription())); 
     } 
     return managedOperation; 
    } 

} 

则...

<bean class="org.springframework.jmx.export.annotation.AnnotationMBeanExporter"> 
    <property name="assembler"> 
     <bean class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler"> 
      <property name="attributeSource"> 
       <bean class="foo.CustomAttributeSource" /> 
      </property> 
     </bean> 
    </property> 
</bean> 
+0

用一个简单的方法更新得到解析器。 –