返回介绍

20.1.2 使用接口定义 MBean 的操作和属性

发布于 2024-08-17 00:45:49 字数 1325 浏览 0 评论 0 收藏 0

Spring的InterfaceBasedMBeanInfoAssembler是另一种MBean信息装配器,可以让我们通过使用接口来选择bean的哪些方法需要暴露为MBean的托管操作。InterfaceBasedMBeanInfoAssembler与基于方法名称的装配器很相似,只不过不再通过罗列方法名称来确定暴露哪些方法,而是通过列出接口来声明哪些方法需要暴露。

例如,假设我们定义了一个名为SpittleControllerManagedOperations的接口,如下所示:

在这里,我们选择了setSpittlesPerPage()方法和getSpittlesPerPage()方法作为需要暴露的方法。再次提醒,这一对存取器方法间接暴露了spittlesPerPage属性作为MBean的托管属性。为了应用此装配器,我们只需要使用如下的assemblerbean替换之前基于方法名称的装配器即可:

managedInterfaces属性接受一个或多个接口组成的列表作为MBean的管理接口——在本示例中为SpittleControllerManagedOperations接口。

SpittleController并没有显式实现SpittleControllerManagedOperations接口,这可能并不明显,但相当有趣。这个接口只是为了标识导出的内容,但我们并不需要在代码中直接实现该接口。不过,SpittleController应该实现这个接口,其实也没有其他的原因,只是在MBean和实现类之间应该有一个一致的协议。

如果通过接口来选择MBean操作的话,最吸引人的一点在于我们可以把很多方法放在少量的接口中,从而确保InterfaceBasedMBeanInfoAssembler的配置尽量简洁。在输出多个MBean时,基于接口的方式可以帮助保持Spring配置的简洁。

最终,这些托管操作必须在某处声明,无论是在Spring配置中还是在某个接口中。此外,从代码角度看,托管操作的声明是一种重复——在接口中或Spring上下文中声明的方法名称与实现中所声明的方法名称存在重复。之所以存在这种重复,没有其他原因,仅仅是为了满足MBeanExporter的需要而产生的。

Java注解的一项工作就是帮助消除这种重复。让我们看看如何通过使用注解标注Spring管理的bean,从而将其导出MBean。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文