- 所有已实现的接口:
-
InvocationHandler
InvocationHandler
将MBean的管理接口中的方法通过MBean服务器转发到MBean。
给定一个MBeanServerConnection
,该MBean服务器中的MBean的ObjectName
,以及描述MBean管理接口的Java接口Intf
,使用标准MBean或MXBean的模式,可以使用此类来构造MBean的代理。代理实现接口Intf
,以便将其所有方法通过MBean服务器转发到MBean。
如果InvocationHandler
用于MXBean,则方法的参数将从在MXBean接口中声明的类型转换为相应的映射类型,并且返回值将从映射类型转换为声明的类型。例如,对于方法public List<String> reverse(List<String> list);
并且假设List<String>
的映射类型为 String[]
,调用proxy.reverse(someList)
将someList
从List<String>
转换为String[]
,调用MBean操作reverse
,然后将返回的String[]
转换为List<String>
。
当在使用此调用处理程序的代理上调用Object.toString()、Object.hashCode()或Object.equals(Object)时,仅当它出现在代理的一个接口中时,才将其转发到MBean服务器作为代理MBean上的方法。对于使用JMX.newMBeanProxy
或JMX.newMXBeanProxy
创建的代理,这意味着该方法必须出现在标准MBean或MXBean接口中。否则,这些方法具有以下行为:
- toString()返回代理的字符串表示
- hashCode()返回代理的哈希码,使得两个相等的代理具有相同的哈希码
- equals(Object)仅当Object参数与此代理的相同代理类,具有相同的MBeanServerConnection和ObjectName的MBeanServerInvocationHandler时,才返回true;如果一个
MBeanServerInvocationHandler
是使用Class
参数构造的,则另一个必须使用相同的Class
构造equals
才会返回true。
- 自1.5版本起:
- 1.5
-
Constructor Summary
ConstructorDescriptionMBeanServerInvocationHandler
(MBeanServerConnection connection, ObjectName objectName) 将方法通过MBean服务器转发到标准MBean的调用处理程序。MBeanServerInvocationHandler
(MBeanServerConnection connection, ObjectName objectName, boolean isMXBean) 可以将方法通过MBean服务器转发到标准MBean或MXBean的调用处理程序。 -
Method Summary
Modifier and TypeMethodDescription通过此处理程序转发使用代理的方法的MBean服务器连接。要将方法转发到MBean服务器中的MBean的名称。处理代理实例上的方法调用,并返回结果。boolean
isMXBean()
如果为true,则代理是用于MXBean,并且将适当的映射应用于方法参数和返回值。static <T> T
newProxyInstance
(MBeanServerConnection connection, ObjectName objectName, Class<T> interfaceClass, boolean notificationBroadcaster) 返回一个代理,通过该代理实现给定的接口,将其方法通过给定的MBean服务器转发到指定的MBean。
-
Constructor Details
-
MBeanServerInvocationHandler
将方法通过MBean服务器转发到标准MBean的调用处理程序。可以调用此构造函数,而不是依赖于
JMX.newMBeanProxy
,例如,如果需要为ClassLoader
提供不同的Proxy.newProxyInstance
。此构造函数不适用于MXBean。对于MXBean,请使用
MBeanServerInvocationHandler(MBeanServerConnection, ObjectName, boolean)
。此构造函数等效于new MBeanServerInvocationHandler(connection, objectName, false)
。- 参数:
-
connection
- 通过该处理程序转发使用该处理程序的代理的所有方法的MBean服务器连接。 -
objectName
- 将要转发方法的MBean在MBean服务器中的名称。
-
MBeanServerInvocationHandler
public MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName, boolean isMXBean) 可以将方法通过MBean服务器转发到标准MBean或MXBean的调用处理程序。可以调用此构造函数,而不是依赖于
JMX.newMXBeanProxy
,例如,如果需要为ClassLoader
提供不同的Proxy.newProxyInstance
。- 参数:
-
connection
- 通过该处理程序转发使用该处理程序的代理的所有方法的MBean服务器连接。 -
objectName
- 将要转发方法的MBean在MBean服务器中的名称。 -
isMXBean
- 如果为true,则代理是用于MXBean
,并且将适当的映射应用于方法参数和返回值。 - 自1.6版本起:
- 1.6
-
-
Method Details
-
getMBeanServerConnection
通过该处理程序转发使用该处理程序的代理的方法的MBean服务器连接。
- 返回:
- MBean服务器连接。
- 自1.6版本起:
- 1.6
-
getObjectName
将方法转发到MBean服务器中的MBean的名称。
- 返回:
- 对象名称。
- 自1.6版本起:
- 1.6
-
isMXBean
public boolean isMXBean()如果为true,则代理是用于MXBean,并且将适当的映射应用于方法参数和返回值。
- 返回:
- 代理是否用于MXBean。
- 自1.6版本起:
- 1.6
-
newProxyInstance
public static <T> T newProxyInstance(MBeanServerConnection connection, ObjectName objectName, Class<T> interfaceClass, boolean notificationBroadcaster) 返回一个代理,通过该代理实现给定的接口,将其方法通过给定的MBean服务器转发到指定的MBean。从1.6版本开始,优先使用方法
JMX.newMBeanProxy(MBeanServerConnection, ObjectName, Class)
和JMX.newMBeanProxy(MBeanServerConnection, ObjectName, Class, boolean)
,而不是使用此方法。此方法等效于
Proxy.newProxyInstance
(interfaceClass.getClassLoader(), interfaces, handler)
。这里handler
是new MBeanServerInvocationHandler(connection, objectName)
的结果,interfaces
是一个数组,如果notificationBroadcaster
为false,则有一个元素,如果为true,则有两个元素。interfaces
的第一个元素是interfaceClass
,如果存在第二个元素,则为NotificationEmitter.class
。- 类型参数:
-
T
- 允许编译器知道如果interfaceClass
参数为MyMBean.class
,则返回类型为MyMBean
。 - 参数:
-
connection
- 要转发到的MBean服务器。 -
objectName
- 要转发到connection
中的MBean的名称。 -
interfaceClass
- MBean导出的管理接口,也将由返回的代理实现。 -
notificationBroadcaster
- 通过connection
转发其方法,使返回的代理实现NotificationEmitter
。在代理上调用NotificationBroadcaster.addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
将导致调用MBeanServerConnection.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)
,其他方法也类似,NotificationBroadcaster
和NotificationEmitter
的其他方法也是如此。 - 返回:
- 新的代理实例。
- 参见:
-
invoke
从接口复制的描述:InvocationHandler
处理代理实例上的方法调用,并返回结果。当在与其关联的代理实例上调用方法时,此方法将在调用处理程序上调用。- 指定者:
-
invoke
在接口InvocationHandler
中 - 参数:
-
proxy
- 调用方法的代理实例 -
method
- 与代理实例上调用的接口方法对应的Method
实例。Method
对象的声明类将是声明该方法的接口,该接口可能是代理接口的超接口,代理类通过该接口继承该方法。 -
args
- 包含在代理实例上方法调用中传递的参数值的对象数组,如果接口方法不带参数,则为null
。 基本类型的参数将包装在适当的基本包装类的实例中,例如java.lang.Integer
或java.lang.Boolean
。 - 返回值:
-
从代理实例上的方法调用返回的值。 如果接口方法的声明返回类型是基本类型,则此方法返回的值必须是相应基本包装类的实例;否则,它必须是可分配给声明的返回类型的类型。 如果此方法返回的值为
null
且接口方法的返回类型为基本类型,则代理实例上的方法调用将引发NullPointerException
。 如果此方法返回的值与上述描述的接口方法的声明返回类型不兼容,则代理实例上的方法调用将引发ClassCastException
。 - 抛出:
-
Throwable
- 从代理实例上的方法调用中抛出的异常。 异常的类型必须可分配给接口方法的throws
子句中声明的任何异常类型,或者可分配给未经检查的异常类型java.lang.RuntimeException
或java.lang.Error
。 如果此方法抛出了一个未在接口方法的throws
子句中声明的任何异常类型,则代理实例上的方法调用将抛出一个包含此方法抛出的异常的UndeclaredThrowableException
。 - 参见:
-