#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 был гибко продвинут до первоклассных аннотаций. Звучит как пользовательский документ….