标准MBeans与动态MBeans有什么区别?
- 标准MBeans是静态定义的,其属性和操作在编译时就已知。而动态MBeans可以在运行时动态地添加、更改或删除属性和操作。
- 标准MBeans需要实现特定接口来暴露MBean功能,而动态MBeans可以使用任何Java对象作为MBean。
每种组件的优缺点是什么,我们应该在何时选择它们来管理资源?
标准MBean具有固定的元数据,在MBean的生命周期内不会更改。动态MBean会在运行时定义其元数据,并可以修改和重新发布其元数据。以Java的一个[糟糕的]编造的类比为例:假设您编写了一个列出目录中文件数量的类。标准类方法可能如下所示:
public int getFileCount(String directoryName)
另一方面,此类的Dynamic MBean版本将不带任何方法,但是当它启动时,会扫描可用的目录,并为找到的每个目录创建一个新方法:
public int getFileCountDir1();
public int getFileCountDir2();
....
public int getFileCountDirN();
那么这样并不是一个非常有用的设置,但是假设您想要创建一个MBean来显示所有JVM的系统属性。 好吧....系统属性会发生更改...并且没有合理的方法事先知道将定义哪些属性键,因此这将是动态MBean的更好代表。
利弊真正取决于: