|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
javax.management
类 MBeanServerInvocationHandler
java.lang.Object javax.management.MBeanServerInvocationHandler
- 所有已实现的接口:
- InvocationHandler
-
public class MBeanServerInvocationHandler
- extends Object
- implements InvocationHandler
在 MBean 的管理接口中从 MBean 服务器向 MBean 转发方法的 InvocationHandler
。
在给定 MBeanServerConnection
、该 MBean 服务器内某个 MBean 的 ObjectName
,以及一个 Java 接口 Intf
(使用 Standard MBean 的模式描述 MBean 的管理接口)的情况下,此类可用于构造 MBean 的代理。该代理实现接口 Intf
,这样可通过 MBean 服务器向 MBean 转发其所有方法。
如果 MBean 服务器 mbs
包含具有 ObjectName
为 name
的 MBean,并且如果该 MBean 的管理接口由 Java 接口 Intf
所描述,则可以象下面这样为该 MBean 构造一个代理:
Intf proxy = (Intf)
MBeanServerInvocationHandler.newProxyInstance
(mbs,
name,
Intf.class,
false);
例如,假定 Intf
如下:
public interface Intf { public String getSomeAttribute(); public void setSomeAttribute(String value); public void someOperation(String param1, int param2); }
那么可以执行:
proxy.getSomeAttribute()
,它将导致调用mbs.
getAttribute
(name, "SomeAttribute")
。proxy.setSomeAttribute("whatever")
,它将导致调用mbs.
setAttribute
(name, new Attribute("SomeAttribute", "whatever"))
。proxy.someOperation("param1", 2)
,它将被解释为调用mbs.
invoke
(name, "someOperation", <etc>)
。
如果 newProxyInstance
的最后一个参数是 true
,则假定该 MBean 是一个 NotificationBroadcaster
或 NotificationEmitter
,并且返回的代理将实现 NotificationEmitter
。在该代理上调用 NotificationBroadcaster.addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
将导致对 MBeanServerConnection.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)
的调用,对于 NotificationBroadcaster
和 NotificationEmitter
的其他方法也是如此。
当使用此调用处理程序在代理上调用方法 Object.toString()
、Object.hashCode()
和 Object.equals(Object)
时,会以一种与在已代理 MBean 上调用方法相同的形式将其转发到 MBean 服务器。仅当该 MBean 在其管理接口中声明了这些方法时才能如此操作。
- 从以下版本开始:
- 1.5
构造方法摘要 | |
---|---|
MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName) 通过 MBean 服务器转发方法的调用处理程序。 |
方法摘要 | |
---|---|
Object |
invoke(Object proxy, Method method, Object[] args) 在代理实例上处理方法调用并返回结果。 |
static Object |
newProxyInstance(MBeanServerConnection connection, ObjectName objectName, Class interfaceClass, boolean notificationBroadcaster) 返回一个代理,该代理通过将代理的方法从给定的 MBean 服务器转发到指定 MBean 来实现给定的接口。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
MBeanServerInvocationHandler
public MBeanServerInvocationHandler(MBeanServerConnection connection, ObjectName objectName)
-
通过 MBean 服务器转发方法的调用处理程序。可能会调用此构造方法,而不是依赖于
newProxyInstance(javax.management.MBeanServerConnection, javax.management.ObjectName, java.lang.Class, boolean)
,例如在需要为Proxy.newProxyInstance
提供一个不同ClassLoader
的情况下。- 参数:
-
connection
- MBean 服务器连接,通过此连接转发所有使用此处理程序的代理方法。 -
objectName
- MBean 服务器内的 MBean 名称,各个方法将转发到该 MBean。
方法详细信息 |
---|
newProxyInstance
public static Object newProxyInstance(MBeanServerConnection connection, ObjectName objectName, Class interfaceClass, boolean notificationBroadcaster)
-
返回一个代理,该代理通过将代理的方法从给定的 MBean 服务器转发到指定 MBean 来实现给定的接口。
此方法等效于
Proxy.newProxyInstance
(interfaceClass.getClassLoader(), interfaces, handler)
。其中handler
是new MBeanServerInvocationHandler(connection, objectName)
的结果,而interfaces
是一个数组,如果notificationBroadcaster
为 false,则该数组有一个元素,如果为 true,则该数组有两个元素。interfaces
的第一个元素是interfaceClass
,第二个(如果有)是NotificationEmitter.class
。 -
-
- 参数:
-
connection
- 要转发到的目标 MBean 服务器。 -
objectName
- 在要转发到的connection
内的 MBean 名。 -
interfaceClass
- MBean 输出的管理接口,也由返回的代理来实现。 -
notificationBroadcaster
- 使返回的代理实现NotificationEmitter
,方法是通过connection
转发其方法。 - 返回:
- 新的代理实例。
invoke
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
-
从接口
InvocationHandler
复制的描述 - 在代理实例上处理方法调用并返回结果。在与方法关联的代理实例上调用方法时,将在调用处理程序上调用此方法。
-
- 指定者:
-
接口
InvocationHandler
中的invoke
-
- 参数:
-
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
。 - 另请参见:
-
UndeclaredThrowableException
所有类
|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |