类 MBeanServerInvocationHandler

java.lang.Object
javax.management.MBeanServerInvocationHandler
所有已实现的接口:
InvocationHandler

public class MBeanServerInvocationHandler extends Object implements InvocationHandler

InvocationHandler 通过 MBean 服务将 MBean 管理接口中的方法转发到 MBean。

给定 MBeanServerConnection 、该 MBean 服务中的 MBean 的 ObjectName 以及使用标准 MBean 或 MXBean 的模式描述 MBean 的管理接口的 Java 接口 Intf,此类可用于构造 MBean 的代理.代理实现了接口 Intf,因此它的所有方法都通过 MBean 服务转发到 MBean。

如果InvocationHandler用于MXBean,则方法的参数从MXBean接口中声明的类型转换为对应的映射类型,返回值从映射类型转换为声明的类型。例如,使用方法
public List<String> reverse(List<String> list);
假设 List<String> 的映射类型是 String[],调用 proxy.reverse(someList) 会将 someListList<String> 转换为 String[],调用 MBean 操作 reverse,然后将返回的 String[] 转换为 List<String>

当使用此调用处理程序在代理上调用方法 Object.toString()、Object.hashCode() 或 Object.equals(Object) 时,仅当它出现在代理的接口之一。对于使用 JMX.newMBeanProxy JMX.newMXBeanProxy 创建的代理,这意味着该方法必须出现在 Standard MBean 或 MXBean 接口中。否则这些方法具有以下行为:

  • toString() 返回代理的字符串表示
  • hashCode() 返回代理的哈希码,使得两个相同的代理具有相同的哈希码
  • equals(Object) 当且仅当 Object 参数与此代理属于同一代理类时才返回 true,并且 MBeanServerInvocationHandler 具有相同的 MBeanServerConnection 和 ObjectName;如果其中一个 MBeanServerInvocationHandler 是用 Class 参数构造的,那么另一个必须是用相同的 Class 构造的,因为 equals 才能返回 true。
自从:
1.5
  • 构造方法详细信息

    • MBeanServerInvocationHandler

      public MBeanServerInvocationHandler(MBeanServerConnection  connection, ObjectName  objectName)

      通过 MBean 服务将方法转发到标准 MBean 的调用处理程序。可以调用此构造函数而不是依赖 JMX.newMBeanProxy ,例如,如果您需要提供不同的 ClassLoader Proxy.newProxyInstance

      此构造函数不适用于 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 - 如果为真,则代理用于 MXBean ,并且适当的映射将应用于方法参数和返回值。
      自从:
      1.6
  • 方法详情

    • getMBeanServerConnection

      public MBeanServerConnection  getMBeanServerConnection()

      MBean 服务连接,使用此处理程序的代理方法通过该连接被转发。

      返回:
      MBean 服务连接。
      自从:
      1.6
    • getObjectName

      public ObjectName  getObjectName()

      将方法转发到的 MBean 服务中的 MBean 的名称。

      返回:
      对象名称。
      自从:
      1.6
    • isMXBean

      public boolean isMXBean()

      如果为 true,则代理适用于 MXBean,并且将适当的映射应用于方法参数和返回值。

      返回:
      代理是否用于 MXBean。
      自从:
      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) 。这里 handlernew MBeanServerInvocationHandler(connection, objectName) 的结果,而 interfaces 是一个数组,如果 notificationBroadcaster 为假,则有一个元素;如果为真,则有两个元素。 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

      public Object  invoke(Object  proxy, Method  method, Object [] args) throws Throwable
      从接口 InvocationHandler 复制的描述
      处理代理实例上的方法调用并返回结果。当在与其关联的代理实例上调用方法时,将在调用处理程序上调用此方法。
      指定者:
      invoke 在接口 InvocationHandler
      参数:
      proxy - 调用该方法的代理实例
      method - 与在代理实例上调用的接口方法对应的 Method 实例。 Method 对象的声明类将是声明该方法的接口,它可能是代理类通过其继承该方法的代理接口的超接口。
      args - 包含在代理实例的方法调用中传递的参数值的对象数组,或者 null 如果接口方法不带参数。原始类型的参数包装在适当的原始包装类的实例中,例如 java.lang.Integerjava.lang.Boolean
      返回:
      从代理实例上的方法调用返回的值。如果接口方法声明的返回类型是原始类型,则该方法返回的值必须是对应原始包装类的实例;否则,它必须是可分配给声明的返回类型的类型。如果此方法返回的值为 null 并且接口方法的返回类型为原始类型,则代理实例上的方法调用将抛出 NullPointerException。如果此方法返回的值与上述接口方法声明的返回类型不兼容,则代理实例上的方法调用将抛出 ClassCastException
      抛出:
      Throwable - 从代理实例的方法调用中抛出的异常。异常的类型必须可分配给接口方法的 throws 子句中声明的任何异常类型或未检查的异常类型 java.lang.RuntimeExceptionjava.lang.Error 。如果此方法抛出的已检查异常无法分配给接口方法的 throws 子句中声明的任何异常类型,则包含此方法抛出的异常的 UndeclaredThrowableException 将由方法调用抛出代理实例。
      参见: