透過代理訪問 MBean
Spring JMX 允許您建立代理,這些代理將呼叫重新路由到註冊在本地或遠端 MBeanServer 中的 MBean。這些代理為您提供一個標準的 Java 介面,透過該介面您可以與 MBean 進行互動。以下程式碼展示瞭如何為在本地 MBeanServer 中執行的 MBean 配置代理
<bean id="proxy" class="org.springframework.jmx.access.MBeanProxyFactoryBean">
<property name="objectName" value="bean:name=testBean"/>
<property name="proxyInterface" value="org.springframework.jmx.IJmxTestBean"/>
</bean>
在前面的示例中,您可以看到為註冊在 ObjectName bean:name=testBean 下的 MBean 建立了一個代理。代理實現的介面集由 proxyInterfaces 屬性控制,並且將這些介面上的方法和屬性對映到 MBean 上的操作和屬性的規則與 InterfaceBasedMBeanInfoAssembler 使用的規則相同。
MBeanProxyFactoryBean 可以為任何可以透過 MBeanServerConnection 訪問的 MBean 建立代理。預設情況下,它會定位並使用本地 MBeanServer,但您可以覆蓋此設定並提供一個指向遠端 MBeanServer 的 MBeanServerConnection,以滿足指向遠端 MBean 的代理需求
<bean id="clientConnector"
class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
<property name="serviceUrl" value="service:jmx:rmi://remotehost:9875"/>
</bean>
<bean id="proxy" class="org.springframework.jmx.access.MBeanProxyFactoryBean">
<property name="objectName" value="bean:name=testBean"/>
<property name="proxyInterface" value="org.springframework.jmx.IJmxTestBean"/>
<property name="server" ref="clientConnector"/>
</bean>
在前面的示例中,我們使用 MBeanServerConnectionFactoryBean 建立了一個指向遠端機器的 MBeanServerConnection。然後,這個 MBeanServerConnection 透過 server 屬性傳遞給 MBeanProxyFactoryBean。建立的代理透過此 MBeanServerConnection 將所有呼叫轉發給 MBeanServer。