大多数情况下,MXBean 解决方案是可行的方法,尽管有一种比生成 CompositeDataSupport 实例更简单的方法。假设您的课程是:
public class Something {
private String foo;
private Date date;
<Insert Ctor here>
public String getFoo() {
return foo;
}
public Date getDate() {
return date;
}
}
您可以按如下方式创建 MBean 接口:
public interface SomethingMBean { // same package please...
public String getFoo();
public Date getDate();
}
Make Something 实现SomethingMBean:
public class Something implements SomethingMBean {
.....
}
现在在您的实际 MBean(@MXBean 注释的)中,您可以定义如下方法:
public List<SomethingMBean> getSomethings() {
.....
}
Java6+ MBeanServer 将在运行时自动生成 CompositeDataTypes 和实例。作为一个简单的诊断工具,我经常将 JVM 的ThreadMXBean换成一个使用这种技术公开ThreadInfo的封装的。(有关示例,请参见ExtendedThreadManager )在 JConsole 中如下所示: