Module  java.management
软件包  javax.management

Class MBeanServerInvocationHandler

  • All Implemented Interfaces:
    InvocationHandler


    public class MBeanServerInvocationHandler
    extends Object
    implements InvocationHandler

    InvocationHandler将MBean管理界面中的方法通过MBean服务器转发到MBean。

    给定一个MBeanServerConnection ,该ObjectName一个MBean的该MBean服务器中,并且Java接口Intf描述使用Standard MBean或MXBean的模式的MBean的管理接口,这个类可以用来构建一个代理在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))方法仅在代理的MBean中出现时才转发到MBean服务器代理接口之一。 对于使用JMX.newMBeanProxyJMX.newMXBeanProxy创建的代理,这意味着该方法必须出现在标准MBean或MXBean接口中。 否则这些方法具有以下行为:

    • toString()返回代理的字符串表示形式
    • hashCode()返回代理的哈希码,使得两个相等的代理具有相同的哈希码
    • 如果Object参数与此代理具有相同的代理类,则equals(Object)将返回true,而MBeanServerInvocationHandler具有相同的MBeanServerConnection和ObjectName; 如果其中一个MBeanServerInvocationHandler被构造为一个Class参数,则另一个必须已经被构造为相同的Classequals返回true。
    从以下版本开始:
    1.5
    • 构造方法详细信息

      • 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
    • 方法详细信息

      • 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
      • invoke

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