Как автоматически генерировать документы для классов, аннотированных аннотациями spring jmx

#java #spring #javadoc #jmx

#java #spring #Javadoc #jmx

Вопрос:

У меня есть некоторый код, который использует эти аннотации spring:

 org.springframework.jmx.export.annotation.ManagedAttribute;
org.springframework.jmx.export.annotation.ManagedOperation;
org.springframework.jmx.export.annotation.ManagedOperationParameter;
org.springframework.jmx.export.annotation.ManagedOperationParameters;
org.springframework.jmx.export.annotation.ManagedResource;
  

Я хочу сгенерировать некоторую документацию (даже просто javadocs), используя комментарии в аннотациях, например, рассмотрим следующий метод?

  @ManagedOperation(description="Does foo to bar")
 @ManagedOperationParameters({
 @ManagedOperationParameter(name = "bar", description = "The bar you want to foo.")})    
 public long fooBar( Bar bar) throws Exception {
   ...
 }
  

Есть ли какой-нибудь способ, которым я могу автоматически генерировать документы для этого, или мне придется дублировать все строки аннотаций в javadoc в дополнение к нему?

Ответ №1:

Сначала создайте пользовательский AnnotationMbeanExporter с открытым методом, который делегирует getRegisteredObjectNames() . Используйте это в качестве вашего MBeanExporter.

Например:

 @Component
// This is a copy of the AnnotationMBeanExporter with a public version of getRegisteredObjectNames()
public class AnnotationMBeanExporter extends MBeanExporter {

  @Autowired
  MBeanServer mbeanServer;

  AnnotationJmxAttributeSource annotationSource = new AnnotationJmxAttributeSource();

  AnnotationMBeanExporter() {
      setServer(mbeanServer);
      setNamingStrategy(new MetadataNamingStrategy(annotationSource));
      setAssembler(new MetadataMBeanInfoAssembler(annotationSource));
      setAutodetectMode(MBeanExporter.AUTODETECT_ALL);
  }

  public ObjectName[] getExportedObjectNames() {
    return getRegisteredObjectNames();
  }
}
  

Затем для вашего отчета выполните итерацию по именам объектов, возвращенным из getExportedObjectNames(), и получите соответствующие метаданные для каждого компонента JMX.

Например:

     for (ObjectName objectName: mbeanExporter.getExportedObjectNames()) {
      MBeanInfo mbeanInfo = mbeanServer.getMBeanInfo(objectName);
      MBeanOperationInfo[] operations = mbeanInfo.getOperations();
      // etc.
    }
  

Комментарии:

1. Я думаю, вы пропустили тег ‘java’

2. 🙂 это тривиально преобразовать в java. я вырезал и вставил существующий код.

3. Я сочувствую. Мои аннотации JMX всегда делают мои теги JavaDoc [в основном] избыточными. Я бы хотел, чтобы JavaDoc был гибко продвинут до первоклассных аннотаций. Звучит как пользовательский документ….