- 所有超接口:
-
MBeanServerConnection
- 所有已知子接口:
-
MBeanServerForwarder
这是代理端MBean操作的接口。它包含了创建、注册和删除MBean所需的方法,以及已注册MBean的访问方法。这是JMX基础设施的核心组件。
用户代码通常不会实现此接口。相反,实现此接口的对象是通过MBeanServerFactory
类中的方法之一获取的。
每个添加到MBean服务器的MBean都变得可管理:其属性和操作通过连接到该MBean服务器的连接器/适配器变得可以远程访问。除非是符合JMX规范的MBean,否则无法将Java对象注册到MBean服务器中。
当在MBean服务器中注册或注销MBean时,会发出一个MBeanServerNotification
通知。要将对象注册为MBeanServerNotifications的侦听器,应调用MBean服务器方法addNotificationListener
,其中ObjectName
是MBeanServerDelegate
的ObjectName
。这个ObjectName
是:JMImplementation:type=MBeanServerDelegate
。
从createMBeanServer
或newMBeanServer
方法中获取的对象将对其方法应用安全检查,如下所示。
首先,如果没有安全管理器(System.getSecurityManager()
为null),则此接口的实现可以自由选择不进行任何检查。
假设存在安全管理器,或者实现选择无论如何进行检查,则将按照以下详细说明进行检查。在接下来的内容中,除非另有说明,className
是目标MBean的MBeanInfo.getClassName()
返回的字符串。
如果安全检查失败,方法将抛出SecurityException
。
对于可能抛出InstanceNotFoundException
的方法,无论权限如何,对不存在的MBean都会抛出此异常。这是因为不存在的MBean没有className
。
-
对于
invoke
方法,调用者的权限必须包含MBeanPermission(className, operationName, name, "invoke")
。 -
对于
getAttribute
方法,调用者的权限必须包含MBeanPermission(className, attribute, name, "getAttribute")
。 -
对于
getAttributes
方法,调用者的权限必须包含MBeanPermission(className, null, name, "getAttribute")
。此外,对于AttributeList
中的每个属性a,如果调用者的权限不包含MBeanPermission(className, a, name, "getAttribute")
,则MBean服务器将表现为如果该属性不在提供的列表中。 -
对于
setAttribute
方法,调用者的权限必须包含MBeanPermission(className, attrName, name, "setAttribute")
,其中attrName
是attribute.getName()
。 -
对于
setAttributes
方法,调用者的权限必须包含MBeanPermission(className, null, name, "setAttribute")
。此外,对于AttributeList
中的每个属性a,如果调用者的权限不包含MBeanPermission(className, a, name, "setAttribute")
,则MBean服务器将表现为如果该属性不在提供的列表中。 -
对于
addNotificationListener
方法,调用者的权限必须包含MBeanPermission(className, null, name, "addNotificationListener")
。 -
对于
removeNotificationListener
方法,调用者的权限必须包含MBeanPermission(className, null, name, "removeNotificationListener")
。 -
对于
getMBeanInfo
方法,调用者的权限必须包含MBeanPermission(className, null, name, "getMBeanInfo")
。 -
对于
getObjectInstance
方法,调用者的权限必须包含MBeanPermission(className, null, name, "getObjectInstance")
。 -
对于
isInstanceOf
方法,调用者的权限必须包含MBeanPermission(className, null, name, "isInstanceOf")
。 -
对于
queryMBeans
方法,调用者的权限必须包含MBeanPermission(null, null, null, "queryMBeans")
。此外,对于每个匹配name
的MBeann,如果调用者的权限不包含MBeanPermission(className, null, n, "queryMBeans")
,则MBean服务器将表现为如果该MBean不存在。某些查询元素对MBean服务器执行操作。如果调用者对给定MBean没有所需的权限,则该MBean将不包含在查询结果中。受影响的标准查询元素包括
Query.attr(String)
,Query.attr(String,String)
和Query.classattr()
。 -
对于
queryNames
方法,检查与queryMBeans
相同,只是在MBeanPermission
对象中使用"queryNames"
代替"queryMBeans"
。请注意,"queryMBeans"
权限意味着相应的"queryNames"
权限。 -
对于
getDomains
方法,调用者的权限必须包含MBeanPermission(null, null, null, "getDomains")
。此外,对于返回数组中的每个域d,如果调用者的权限不包含MBeanPermission(null, null, new ObjectName("d:x=x"), "getDomains")
,则该域将从数组中消除。这里,x=x
是任何key=value对,用于满足ObjectName的构造函数但在其他方面不相关。 -
对于
getClassLoader
方法,调用者的权限必须包含MBeanPermission(className, null, loaderName, "getClassLoader")
。 -
对于
getClassLoaderFor
方法,调用者的权限必须包含MBeanPermission(className, null, mbeanName, "getClassLoaderFor")
。 -
对于
getClassLoaderRepository
方法,调用者的权限必须包含MBeanPermission(null, null, null, "getClassLoaderRepository")
。 -
对于已弃用的
deserialize
方法,所需的权限与替代方法相同。 -
对于
instantiate
方法,调用者的权限必须包含MBeanPermission(className, null, null, "instantiate")
,其中className
是要实例化的类的名称。 -
对于
registerMBean
方法,调用者的权限必须包含MBeanPermission(className, null, name, "registerMBean")
。如果
MBeanPermission
检查成功,则通过检查MBean的类来验证其ProtectionDomain
是否意味着MBeanTrustPermission("register")
。最后,如果
name
参数为null,则使用MBeanRegistration.preRegister
返回的ObjectName
进行另一个MBeanPermission
检查。 -
对于
createMBean
方法,调用者的权限必须包含等效instantiate
后跟registerMBean
所需的权限。 -
对于
unregisterMBean
方法,调用者的权限必须包含MBeanPermission(className, null, name, "unregisterMBean")
。
- 自JDK版本:
- 1.5
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addNotificationListener
(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) 向已注册的MBean添加监听器。void
addNotificationListener
(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) 向已注册的MBean添加监听器。createMBean
(String className, ObjectName name) 在MBean服务器中实例化并注册MBean。createMBean
(String className, ObjectName name, Object[] params, String[] signature) 在MBean服务器中实例化并注册MBean。createMBean
(String className, ObjectName name, ObjectName loaderName) 在MBean服务器中实例化并注册MBean。createMBean
(String className, ObjectName name, ObjectName loaderName, Object[] params, String[] signature) 在MBean服务器中实例化并注册MBean。default ObjectInputStream
deserialize
(String className, byte[] data) 已弃用。default ObjectInputStream
deserialize
(String className, ObjectName loaderName, byte[] data) 已弃用。使用getClassLoader
来获取用于反序列化的类加载器。default ObjectInputStream
deserialize
(ObjectName name, byte[] data) 已弃用。使用getClassLoaderFor
来获取适当的类加载器进行反序列化。getAttribute
(ObjectName name, String attribute) 获取命名MBean的特定属性的值。getAttributes
(ObjectName name, String[] attributes) 检索命名MBean的多个属性的值。getClassLoader
(ObjectName loaderName) 返回命名的ClassLoader
。getClassLoaderFor
(ObjectName mbeanName) 返回用于加载命名MBean类的ClassLoader
。返回此MBeanServer的ClassLoaderRepository。返回用于命名MBean的默认域。String[]
返回当前注册任何MBean的域的列表。返回MBean服务器中注册的MBean数量。getMBeanInfo
(ObjectName name) 此方法发现MBean为管理公开的属性和操作。getObjectInstance
(ObjectName name) 获取在MBean服务器中注册的给定MBean的ObjectInstance
。instantiate
(String className) 使用MBean服务器的ClassLoader Repository
中注册的所有类加载器列表实例化对象。instantiate
(String className, Object[] params, String[] signature) 使用MBean服务器的ClassLoader Repository
中注册的所有类加载器列表实例化对象。instantiate
(String className, ObjectName loaderName) 使用其ObjectName
指定的类加载器实例化对象。instantiate
(String className, ObjectName loaderName, Object[] params, String[] signature) 实例化对象。invoke
(ObjectName name, String operationName, Object[] params, String[] signature) 在MBean上调用操作。boolean
isInstanceOf
(ObjectName name, String className) 如果指定的MBean是指定类的实例,则返回true,否则返回false。boolean
isRegistered
(ObjectName name) 检查标识为其对象名称的MBean是否已在MBean服务器中注册。queryMBeans
(ObjectName name, QueryExp query) 获取MBean服务器控制的MBean。queryNames
(ObjectName name, QueryExp query) 获取MBean服务器控制的MBean的名称。registerMBean
(Object object, ObjectName name) 将现有对象注册为MBean到MBean服务器。void
removeNotificationListener
(ObjectName name, NotificationListener listener) 从已注册的MBean中删除监听器。void
removeNotificationListener
(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) 从已注册的MBean中删除监听器。void
removeNotificationListener
(ObjectName name, ObjectName listener) 从已注册的MBean中删除监听器。void
removeNotificationListener
(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) 从已注册的MBean中删除监听器。void
setAttribute
(ObjectName name, Attribute attribute) 设置命名MBean的特定属性的值。setAttributes
(ObjectName name, AttributeList attributes) 设置命名MBean的多个属性的值。void
unregisterMBean
(ObjectName name) 从MBean服务器中注销MBean。
-
Method Details
-
createMBean
ObjectInstance createMBean(String className, ObjectName name) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException 在MBean服务器中实例化并注册MBean。MBean服务器将使用其
默认加载器存储库
来加载MBean的类。与MBean关联一个对象名称。如果给定的对象名称为null,则MBean必须通过实现MBeanRegistration
接口并从preRegister
方法返回名称来提供自己的名称。此方法等效于
createMBean(className, name, (Object[]) null, (String[]) null)
。如果此方法成功创建MBean,则会发送如上所述的通知。
- 指定者:
-
createMBean
在接口MBeanServerConnection
- 参数:
-
className
- 要实例化的MBean的类名。 -
name
- MBean的对象名称。可能为null。 - 返回:
-
一个
ObjectInstance
,包含新实例化的MBean的ObjectName
和Java类名。如果包含的ObjectName
为n
,则包含的Java类名为
。getMBeanInfo(n)
.getClassName() - 抛出:
-
RuntimeOperationsException
- 封装了java.lang.IllegalArgumentException
:传递的className为null,传递的ObjectName
包含模式或未为MBean指定ObjectName
。 -
RuntimeMBeanException
- 如果MBean的构造函数或其preRegister
或postRegister
方法抛出RuntimeException
。如果MBean的postRegister
(MBeanRegistration
接口)方法抛出RuntimeException
,createMBean
方法将抛出RuntimeMBeanException
,尽管MBean的创建和注册成功。在这种情况下,实际上将注册MBean,即使createMBean
方法抛出异常。请注意,RuntimeMBeanException
也可以由preRegister
抛出,在这种情况下,MBean将不会被注册。 -
RuntimeErrorException
- 如果MBean的postRegister
(MBeanRegistration
接口)方法抛出Error
,createMBean
方法将抛出RuntimeErrorException
,尽管MBean的创建和注册成功。在这种情况下,实际上将注册MBean,即使createMBean
方法抛出异常。请注意,RuntimeErrorException
也可以由preRegister
抛出,在这种情况下,MBean将不会被注册。 -
ReflectionException
- 封装了java.lang.ClassNotFoundException
或在尝试调用MBean的构造函数时发生的java.lang.Exception
。 -
InstanceAlreadyExistsException
- MBean已经在MBean服务器的控制下。 -
MBeanRegistrationException
- MBean的preRegister
(MBeanRegistration
接口)方法抛出异常。MBean将不会被注册。 -
MBeanException
- MBean的构造函数抛出异常 -
NotCompliantMBeanException
- 此类不是符合JMX标准的MBean - 参见:
-
createMBean
ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException 在MBean服务器中实例化并注册MBean。要使用的类加载器由其对象名称标识。与MBean关联一个对象名称。如果加载程序的对象名称为null,则将使用加载MBean服务器的ClassLoader。如果给定MBean的对象名称为null,则MBean必须通过实现
MBeanRegistration
接口并从preRegister
方法返回名称来提供自己的名称。此方法等效于
createMBean(className, name, loaderName, (Object[]) null, (String[]) null)
。如果此方法成功创建MBean,则会发送如上所述的通知。
- 指定者:
-
createMBean
在接口MBeanServerConnection
中指定 - 参数:
-
className
- 要实例化的MBean的类名。 -
name
- MBean的对象名称。可以为null。 -
loaderName
- 要使用的类加载器的对象名称。 - 返回值:
-
一个
ObjectInstance
,包含新实例化的MBean的ObjectName
和Java类名。如果包含的ObjectName
是n
,则包含的Java类名是
。getMBeanInfo(n)
.getClassName() - 抛出:
-
RuntimeOperationsException
- 封装了一个java.lang.IllegalArgumentException
:传入参数的className为null,传入参数的ObjectName
包含模式,或者未为MBean指定ObjectName
。 -
RuntimeMBeanException
- 如果MBean的构造函数或其preRegister
或postRegister
方法抛出RuntimeException
。如果MBean的postRegister
(MBeanRegistration
接口)方法抛出RuntimeException
,createMBean
方法将抛出RuntimeMBeanException
,尽管MBean的创建和注册成功。在这种情况下,即使createMBean
方法抛出异常,MBean实际上也将被注册。请注意,RuntimeMBeanException
也可以由preRegister
抛出,在这种情况下,MBean将不会被注册。 -
RuntimeErrorException
- 如果MBean的postRegister
(MBeanRegistration
接口)方法抛出Error
,createMBean
方法将抛出RuntimeErrorException
,尽管MBean的创建和注册成功。在这种情况下,即使createMBean
方法抛出异常,MBean实际上也将被注册。请注意,RuntimeErrorException
也可以由preRegister
抛出,在这种情况下,MBean将不会被注册。 -
ReflectionException
- 封装了一个java.lang.ClassNotFoundException
或在尝试调用MBean的构造函数时发生的java.lang.Exception
。 -
InstanceAlreadyExistsException
- 该MBean已经受MBean服务器控制。 -
MBeanRegistrationException
- MBean的preRegister
(MBeanRegistration
接口)方法抛出异常。MBean将不会被注册。 -
MBeanException
- MBean的构造函数抛出异常 -
NotCompliantMBeanException
- 此类不是符合JMX标准的MBean -
InstanceNotFoundException
- 指定的类加载器未在MBean服务器中注册。 - 参见:
-
createMBean
ObjectInstance createMBean(String className, ObjectName name, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException 在MBean服务器中实例化并注册一个MBean。MBean服务器将使用其默认加载器存储库
来加载MBean的类。一个对象名称与MBean相关联。如果给定的对象名称为null,则MBean必须通过实现MBeanRegistration
接口并从preRegister
方法返回名称来提供自己的名称。如果此方法成功创建一个MBean,则会发送如上所述的通知。
- 指定者:
-
createMBean
在接口MBeanServerConnection
中指定 - 参数:
-
className
- 要实例化的MBean的类名。 -
name
- MBean的对象名称。可以为null。 -
params
- 包含要调用的构造函数的参数的数组。 -
signature
- 包含要调用的构造函数的签名的数组。 - 返回值:
-
一个
ObjectInstance
,包含新实例化的MBean的ObjectName
和Java类名。如果包含的ObjectName
是n
,则包含的Java类名是
。getMBeanInfo(n)
.getClassName() - 抛出:
-
RuntimeOperationsException
- 封装了一个java.lang.IllegalArgumentException
:传入参数的className为null,传入参数的ObjectName
包含模式,或者未为MBean指定ObjectName
。 -
RuntimeMBeanException
- 如果MBean的构造函数或其preRegister
或postRegister
方法抛出RuntimeException
。如果MBean的postRegister
(MBeanRegistration
接口)方法抛出RuntimeException
,createMBean
方法将抛出RuntimeMBeanException
,尽管MBean的创建和注册成功。在这种情况下,即使createMBean
方法抛出异常,MBean实际上也将被注册。请注意,RuntimeMBeanException
也可以由preRegister
抛出,在这种情况下,MBean将不会被注册。 -
RuntimeErrorException
- 如果MBean的postRegister
(MBeanRegistration
接口)方法抛出Error
,createMBean
方法将抛出RuntimeErrorException
,尽管MBean的创建和注册成功。在这种情况下,即使createMBean
方法抛出异常,MBean实际上也将被注册。请注意,RuntimeErrorException
也可以由preRegister
抛出,在这种情况下,MBean将不会被注册。 -
ReflectionException
- 封装了一个java.lang.ClassNotFoundException
或在尝试调用MBean的构造函数时发生的java.lang.Exception
。 -
InstanceAlreadyExistsException
- 该MBean已经受MBean服务器控制。 -
MBeanRegistrationException
- MBean的preRegister
(MBeanRegistration
接口)方法抛出异常。MBean将不会被注册。 -
MBeanException
- MBean的构造函数抛出异常 -
NotCompliantMBeanException
- 此类不是符合JMX标准的MBean - 参见:
-
createMBean
ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException 在MBean服务器中实例化并注册一个MBean。要使用的类加载器由其对象名称标识。一个对象名称与MBean相关联。如果未指定加载器的对象名称,则将使用加载MBean服务器的ClassLoader。如果给定的MBean对象名称为null,则MBean必须通过实现
MBeanRegistration
接口并从preRegister
方法返回名称来提供自己的名称。如果此方法成功创建一个MBean,则会发送如上所述的通知。
- 指定者:
-
createMBean
在接口MBeanServerConnection
中指定 - 参数:
-
className
- 要实例化的MBean的类名。 -
name
- MBean的对象名称。可以为null。 -
loaderName
- 要使用的类加载器的对象名称。 -
params
- 包含要调用的构造函数的参数的数组。 -
signature
- 包含要调用的构造函数的签名的数组。 - 返回:
-
一个
ObjectInstance
,包含新实例化的MBean的ObjectName
和Java类名。如果包含的ObjectName
是n
,则包含的Java类名是
。getMBeanInfo(n)
.getClassName() - 抛出:
-
RuntimeOperationsException
- 封装了一个java.lang.IllegalArgumentException
:传入参数的类名为null,传入参数的ObjectName
包含模式或未为MBean指定ObjectName
。 -
RuntimeMBeanException
- MBean的构造函数或其preRegister
或postRegister
方法抛出了RuntimeException
。如果MBean的postRegister
(MBeanRegistration
接口)方法抛出RuntimeException
,createMBean
方法将抛出RuntimeMBeanException
,尽管MBean的创建和注册成功。在这种情况下,即使createMBean
方法抛出异常,MBean实际上也将被注册。请注意,RuntimeMBeanException
也可以由preRegister
抛出,在这种情况下,MBean将不会被注册。 -
RuntimeErrorException
- 如果MBean的postRegister
(MBeanRegistration
接口)方法抛出Error
,createMBean
方法将抛出RuntimeErrorException
,尽管MBean的创建和注册成功。在这种情况下,即使createMBean
方法抛出异常,MBean实际上也将被注册。请注意,RuntimeErrorException
也可以由preRegister
抛出,在这种情况下,MBean将不会被注册。 -
ReflectionException
- 封装了一个java.lang.ClassNotFoundException
或在尝试调用MBean的构造函数时发生的java.lang.Exception
。 -
InstanceAlreadyExistsException
- MBean已经受MBean服务器控制。 -
MBeanRegistrationException
- MBean的preRegister
(MBeanRegistration
接口)方法抛出了异常。MBean将不会被注册。 -
MBeanException
- MBean的构造函数抛出了异常 -
NotCompliantMBeanException
- 此类不是符合JMX标准的MBean -
InstanceNotFoundException
- 指定的类加载器未在MBean服务器中注册。 - 参见:
-
registerMBean
ObjectInstance registerMBean(Object object, ObjectName name) throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException 将现有对象注册为MBean与MBean服务器。如果给定的对象名称为null,则MBean必须通过实现
MBeanRegistration
接口并从preRegister
方法返回名称来提供自己的名称。如果此方法成功注册MBean,则将发送如上所述的通知。
- 参数:
-
object
- 要注册为MBean的MBean。 -
name
- MBean的对象名称。可以为null。 - 返回:
-
一个
ObjectInstance
,包含新注册的MBean的ObjectName
和Java类名。如果包含的ObjectName
是n
,则包含的Java类名是
。getMBeanInfo(n)
.getClassName() - 抛出:
-
InstanceAlreadyExistsException
- MBean已经受MBean服务器控制。 -
MBeanRegistrationException
- MBean的preRegister
(MBeanRegistration
接口)方法抛出了异常。MBean将不会被注册。 -
RuntimeMBeanException
- 如果MBean的postRegister
(MBeanRegistration
接口)方法抛出RuntimeException
,registerMBean
方法将抛出RuntimeMBeanException
,尽管MBean注册成功。在这种情况下,即使registerMBean
方法抛出异常,MBean实际上也将被注册。请注意,RuntimeMBeanException
也可以由preRegister
抛出,在这种情况下,MBean将不会被注册。 -
RuntimeErrorException
- 如果MBean的postRegister
(MBeanRegistration
接口)方法抛出Error
,registerMBean
方法将抛出RuntimeErrorException
,尽管MBean注册成功。在这种情况下,即使registerMBean
方法抛出异常,MBean实际上也将被注册。请注意,RuntimeErrorException
也可以由preRegister
抛出,在这种情况下,MBean将不会被注册。 -
NotCompliantMBeanException
- 此对象不是符合JMX标准的MBean -
RuntimeOperationsException
- 封装了一个java.lang.IllegalArgumentException
:传入参数的对象为null或未指定对象名称。 - 参见:
-
unregisterMBean
从MBean服务器中注销MBean。MBean由其对象名称标识。一旦调用了该方法,MBean将不再可以通过其对象名称访问。如果此方法成功注销MBean,则将发送如上所述的通知。
- 指定者:
-
unregisterMBean
在接口MBeanServerConnection
中指定 - 参数:
-
name
- 要注销的MBean的对象名称。 - 抛出:
-
RuntimeOperationsException
- 封装了一个java.lang.IllegalArgumentException
:参数中的对象名称为null或您尝试注销的MBean是MBeanServerDelegate
MBean。 -
RuntimeMBeanException
- 如果MBean的postDeregister
(MBeanRegistration
接口)方法抛出RuntimeException
,unregisterMBean
方法将抛出RuntimeMBeanException
,尽管MBean注销成功。在这种情况下,即使unregisterMBean
方法抛出异常,MBean实际上也将被注销。请注意,RuntimeMBeanException
也可以由preDeregister
抛出,在这种情况下,MBean将保持注册状态。 -
RuntimeErrorException
- 如果MBean的postDeregister
(MBeanRegistration
接口)方法抛出Error
,unregisterMBean
方法将抛出RuntimeErrorException
,尽管MBean注销成功。在这种情况下,即使unregisterMBean
方法抛出异常,MBean实际上也将被注销。请注意,RuntimeMBeanException
也可以由preDeregister
抛出,在这种情况下,MBean将保持注册状态。 -
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。 -
MBeanRegistrationException
- MBean的preDeregister(MBeanRegistration
接口)方法抛出了异常。 - 参见:
-
getObjectInstance
从接口复制的描述:MBeanServerConnection
获取在MBean服务器中注册的给定MBean的ObjectInstance
。- 指定者:
-
getObjectInstance
在接口MBeanServerConnection
中 - 参数:
-
name
- MBean的对象名称。 - 返回:
-
与由name指定的MBean相关联的
ObjectInstance
。包含的ObjectName
是name
,包含的类名是
。getMBeanInfo(name)
.getClassName() - 抛出:
-
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。
-
queryMBeans
获取MBean服务器控制的MBeans。此方法允许获取以下任何内容:所有MBeans,由ObjectName
的模式匹配和/或查询表达式指定的一组MBeans,特定的MBean。当对象名称为null或未指定域和关键属性时,将选择所有对象(如果指定了查询,则将进行过滤)。它返回所选MBeans的ObjectInstance
对象集(包含ObjectName
和Java类名)。- 指定者:
-
queryMBeans
在接口MBeanServerConnection
中 - 参数:
-
name
- 用于检索MBeans的对象名称模式。如果为null或未指定域和关键属性,则将检索所有已注册的MBeans。 -
query
- 用于选择MBeans的查询表达式。如果为null,则不会应用查询表达式以选择MBeans。 - 返回:
-
包含所选MBeans的
ObjectInstance
对象的集合。如果没有MBean满足查询条件,则返回一个空列表。
-
queryNames
获取MBean服务器控制的MBeans的名称。此方法允许获取以下任何内容:所有MBeans的名称,由ObjectName
的模式匹配和/或查询表达式指定的一组MBeans的名称,特定MBean的名称(相当于测试MBean是否已注册)。当对象名称为null或未指定域和关键属性时,将选择所有对象(如果指定了查询,则将进行过滤)。它返回所选MBeans的ObjectNames集合。- 指定者:
-
queryNames
在接口MBeanServerConnection
中 - 参数:
-
name
- 用于检索MBean名称的对象名称模式。如果为null或未指定域和关键属性,则将检索所有已注册的MBean的名称。 -
query
- 用于选择MBeans的查询表达式。如果为null,则不会应用查询表达式以选择MBeans。 - 返回:
- 包含所选MBeans的ObjectNames集合。如果没有MBean满足查询条件,则返回一个空列表。
-
isRegistered
从接口复制的描述:MBeanServerConnection
检查由其对象名称标识的MBean是否已在MBean服务器中注册。- 指定者:
-
isRegistered
在接口MBeanServerConnection
中 - 参数:
-
name
- 要检查的MBean的对象名称。 - 返回:
- 如果MBean已在MBean服务器中注册,则为true;否则为false。
- 抛出:
-
RuntimeOperationsException
- 封装了一个java.lang.IllegalArgumentException
:参数中的对象名称为null。
-
getMBeanCount
Integer getMBeanCount()返回MBean服务器中注册的MBean数量。- 指定者:
-
getMBeanCount
在接口MBeanServerConnection
中 - 返回:
- 注册的MBean数量,封装在一个Integer中。如果调用者的权限受限,则此数字可能大于调用者可以访问的MBean数量。
-
getAttribute
Object getAttribute(ObjectName name, String attribute) throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException 从接口复制的描述:MBeanServerConnection
获取命名MBean的特定属性的值。MBean由其对象名称标识。- 指定者:
-
getAttribute
在接口MBeanServerConnection
中 - 参数:
-
name
- 要检索属性的MBean的对象名称。 -
attribute
- 指定要检索的属性的名称的字符串。 - 返回:
- 检索属性的值。
- 抛出:
-
RuntimeOperationsException
- 封装了一个java.lang.IllegalArgumentException
:参数中的对象名称为null或参数中的属性为null。 -
MBeanException
- 封装了MBean的getter引发的异常。 -
AttributeNotFoundException
- 指定的属性在MBean中不可访问。 -
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。 -
ReflectionException
- 封装了在尝试调用setter时抛出的java.lang.Exception
。 - 参见:
-
getAttributes
AttributeList getAttributes(ObjectName name, String[] attributes) throws InstanceNotFoundException, ReflectionException 从接口复制的描述:MBeanServerConnection
检索命名MBean的多个属性的值。MBean由其对象名称标识。
如果由于某种原因无法检索一个或多个属性,则它们将从返回的
AttributeList
中省略。调用者应检查列表是否与attributes
数组的大小相同。要发现阻止检索给定属性的问题,调用getAttribute
以获取该属性。以下是调用此方法并检查是否成功检索所有请求属性的示例:
String[] attrNames = ...; AttributeList list = mbeanServerConnection.getAttributes(objectName, attrNames); if (list.size() == attrNames.length) System.out.println("成功检索所有属性"); else {
List<String>
missing = newArrayList<String>
(Arrays.asList
(attrNames)); for (Attribute a : list.asList()) missing.remove(a.getName()); System.out.println("未检索到: " + missing); }- 指定者:
-
getAttributes
在接口MBeanServerConnection
中 - 参数:
-
name
- 要从中检索属性的MBean的对象名称。 -
attributes
- 要检索的属性列表。 - 返回:
- 检索的属性列表。
- 抛出:
-
RuntimeOperationsException
- 封装了一个java.lang.IllegalArgumentException
:参数中的对象名称为null或参数中的属性为null。 -
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。 -
ReflectionException
- 在尝试调用Dynamic MBean的getAttributes方法时发生异常。 - 参见:
-
setAttribute
void setAttribute(ObjectName name, Attribute attribute) throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException 从接口复制的描述:MBeanServerConnection
设置命名MBean的特定属性的值。MBean由其对象名称标识。- 指定者:
-
setAttribute
在接口MBeanServerConnection
中指定 - 参数:
-
name
- 要设置属性的MBean的名称。 -
attribute
- 要设置的属性的标识和要设置的值。 - 抛出:
-
RuntimeOperationsException
- 包装了一个java.lang.IllegalArgumentException
:参数中的对象名称为null或参数中的属性为null。 -
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。 -
AttributeNotFoundException
- 指定的属性在MBean中不可访问。 -
InvalidAttributeValueException
- 指定的属性值无效。 -
MBeanException
- 包装了MBean的setter抛出的异常。 -
ReflectionException
- 包装了一个java.lang.Exception
,该异常在尝试调用setter时抛出。 - 参见:
-
setAttributes
AttributeList setAttributes(ObjectName name, AttributeList attributes) throws InstanceNotFoundException, ReflectionException 从接口复制的描述:MBeanServerConnection
设置命名MBean的多个属性的值。通过其对象名称标识MBean。
如果由于某种原因无法设置一个或多个属性,则它们将从返回的
AttributeList
中省略。调用者应检查输入AttributeList
与输出AttributeList
的大小是否相同。要发现阻止检索给定属性的问题,通常可以调用setAttribute
来设置该属性,尽管不能保证这样做会起作用。(例如,两个属性的值可能被拒绝,因为它们与彼此不一致。仅允许设置其中一个可能被允许。)以下是调用此方法并检查是否成功设置所有请求属性的示例:
AttributeList inputAttrs = ...; AttributeList outputAttrs = mbeanServerConnection.setAttributes(objectName, inputAttrs); if (inputAttrs.size() == outputAttrs.size()) System.out.println("所有属性均已成功设置"); else {
List<String>
missing = newArrayList<String>
(); for (Attribute a : inputAttrs.asList()) missing.add(a.getName()); for (Attribute a : outputAttrs.asList()) missing.remove(a.getName()); System.out.println("未设置的属性: " + missing); }- 指定者:
-
setAttributes
在接口MBeanServerConnection
中指定 - 参数:
-
name
- 要设置属性的MBean的对象名称。 -
attributes
- 属性列表:要设置的属性的标识和要设置的值。 - 返回:
- 已设置的属性列表及其新值。
- 抛出:
-
RuntimeOperationsException
- 包装了一个java.lang.IllegalArgumentException
:参数中的对象名称为null或参数中的属性为null。 -
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。 -
ReflectionException
- 尝试调用Dynamic MBean的getAttributes方法时发生异常。 - 参见:
-
invoke
Object invoke(ObjectName name, String operationName, Object[] params, String[] signature) throws InstanceNotFoundException, MBeanException, ReflectionException 从接口复制的描述:MBeanServerConnection
调用MBean上的操作。
由于需要一个
signature
来区分可能重载的操作,因此最好通过MBean代理来调用操作。例如,假设您有一个标准MBean接口如下:public interface FooMBean { public int countMatches(String[] patterns, boolean ignoreCase); }
可以如下调用
countMatches
操作:String[] myPatterns = ...; int count = (Integer) mbeanServerConnection.invoke( objectName, "countMatches", new Object[] {myPatterns, true}, new String[] {String[].class.getName(), boolean.class.getName()});
或者,可以通过代理进行调用:
String[] myPatterns = ...; FooMBean fooProxy = JMX.newMBeanProxy( mbeanServerConnection, objectName, FooMBean.class); int count = fooProxy.countMatches(myPatterns, true);
- 指定者:
-
invoke
在接口MBeanServerConnection
中指定 - 参数:
-
name
- 要调用方法的MBean的对象名称。 -
operationName
- 要调用的操作的名称。 -
params
- 包含在调用操作时要设置的参数的数组 -
signature
- 包含操作的签名的数组,格式为Class.getName()
返回的格式。类对象将使用与调用操作的MBean相同的类加载器加载。 - 返回:
- 操作返回的对象,表示在指定的MBean上调用操作的结果。
- 抛出:
-
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。 -
MBeanException
- 包装了MBean的调用方法抛出的异常。 -
ReflectionException
- 包装了一个java.lang.Exception
,在尝试调用方法时抛出。
-
getDefaultDomain
String getDefaultDomain()从接口复制的描述:MBeanServerConnection
返回用于命名MBean的默认域。如果用户未指定域,则默认域名称将用作MBean的ObjectName中的域部分。- 指定者:
-
getDefaultDomain
在接口MBeanServerConnection
中指定 - 返回:
- 默认域。
-
getDomains
String[] getDomains()从接口复制的描述:MBeanServerConnection
返回当前注册任何MBean的域列表。仅当至少有一个MBean注册,并且其
getDomain()
等于该字符串时,返回的数组中才有一个字符串。返回的数组中字符串的顺序未定义。- 指定者:
-
getDomains
在接口MBeanServerConnection
中指定 - 返回:
- 域列表。
-
addNotificationListener
void addNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException 向已注册的MBean添加侦听器。由MBean发出的通知将转发给侦听器。
如果通知的源是对MBean对象的引用,则MBean服务器将用该MBean的ObjectName替换它。否则,源保持不变。- 指定者:
-
addNotificationListener
在接口MBeanServerConnection
中 - 参数:
-
name
- 应向其添加监听器的MBean的名称。 -
listener
- 将处理由注册的MBean发出的通知的监听器对象。 -
filter
- 过滤器对象。如果filter为null,则在处理通知之前不会执行任何过滤。 -
handback
- 在发出通知时要发送给监听器的上下文。 - 抛出:
-
InstanceNotFoundException
- 提供的MBean名称与注册的任何MBean都不匹配。 - 参见:
-
addNotificationListener
void addNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException 向已注册的MBean添加监听器。
MBean发出的通知将由MBeanServer转发给监听器。如果通知的来源是对MBean对象的引用,则MBean服务器将用该MBean的ObjectName替换它。否则,来源保持不变。
接收通知的监听器对象是在调用此方法时使用给定名称注册的对象。即使随后取消注册,它仍将继续接收通知。
- 指定者:
-
addNotificationListener
在接口MBeanServerConnection
中 - 参数:
-
name
- 应向其添加监听器的MBean的名称。 -
listener
- 将处理由注册的MBean发出的通知的监听器对象的名称。 -
filter
- 过滤器对象。如果filter为null,则在处理通知之前不会执行任何过滤。 -
handback
- 在发出通知时要发送给监听器的上下文。 - 抛出:
-
RuntimeOperationsException
- 包装了一个IllegalArgumentException
。由listener
命名的MBean存在,但未实现NotificationListener
接口。 -
InstanceNotFoundException
- 通知监听器或通知广播器的MBean名称与注册的任何MBean都不匹配。 - 参见:
-
removeNotificationListener
void removeNotificationListener(ObjectName name, ObjectName listener) throws InstanceNotFoundException, ListenerNotFoundException 从接口复制的描述:MBeanServerConnection
从已注册的MBean中删除监听器。如果监听器注册了多次,可能使用不同的过滤器或回调函数,此方法将删除所有这些注册。
- 指定者:
-
removeNotificationListener
在接口MBeanServerConnection
中 - 参数:
-
name
- 应从中删除监听器的MBean的名称。 -
listener
- 要删除的监听器的对象名称。 - 抛出:
-
InstanceNotFoundException
- 提供的MBean名称与注册的任何MBean都不匹配。 -
ListenerNotFoundException
- 该监听器未在MBean中注册。 - 参见:
-
removeNotificationListener
void removeNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, ListenerNotFoundException 从接口复制的描述:MBeanServerConnection
从已注册的MBean中删除监听器。
MBean必须具有与给定的
listener
、filter
和handback
参数完全匹配的监听器。如果存在多个这样的监听器,则仅删除一个。如果要删除的监听器中
filter
和handback
参数为null,则这两个参数只能在要删除的监听器中为null。- 指定者:
-
removeNotificationListener
在接口MBeanServerConnection
中 - 参数:
-
name
- 应从中删除监听器的MBean的名称。 -
listener
- 要删除的监听器的对象名称。 -
filter
- 添加监听器时指定的过滤器。 -
handback
- 添加监听器时指定的handback。 - 抛出:
-
InstanceNotFoundException
- 提供的MBean名称与注册的任何MBean都不匹配。 -
ListenerNotFoundException
- 该监听器未在MBean中注册,或者未使用给定的过滤器和handback注册。 - 参见:
-
removeNotificationListener
void removeNotificationListener(ObjectName name, NotificationListener listener) throws InstanceNotFoundException, ListenerNotFoundException 从接口复制的描述:MBeanServerConnection
从已注册的MBean中删除监听器。
如果监听器注册了多次,可能使用不同的过滤器或回调函数,此方法将删除所有这些注册。
- 指定者:
-
removeNotificationListener
在接口MBeanServerConnection
中 - 参数:
-
name
- 应从中删除监听器的MBean的名称。 -
listener
- 要删除的监听器。 - 抛出:
-
InstanceNotFoundException
- 提供的MBean名称与注册的任何MBean都不匹配。 -
ListenerNotFoundException
- 该监听器未在MBean中注册。 - 参见:
-
removeNotificationListener
void removeNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, ListenerNotFoundException 从接口复制的描述:MBeanServerConnection
从已注册的MBean中删除监听器。
MBean必须具有与给定的
listener
、filter
和handback
参数完全匹配的监听器。如果存在多个这样的监听器,则仅删除一个。如果要删除的监听器中
filter
和handback
参数为null,则这两个参数只能在要删除的监听器中为null。- 指定者:
-
removeNotificationListener
在接口MBeanServerConnection
中 - 参数:
-
name
- 应从中删除监听器的MBean的名称。 -
listener
- 要删除的监听器。 -
filter
- 在添加监听器时指定的过滤器。 -
handback
- 在添加监听器时指定的handback。 - 抛出:
-
InstanceNotFoundException
- 提供的MBean名称与注册的任何MBean都不匹配。 -
ListenerNotFoundException
- 该监听器未在MBean中注册,或者未使用给定的过滤器和handback注册。 - 参见:
-
getMBeanInfo
MBeanInfo getMBeanInfo(ObjectName name) throws InstanceNotFoundException, IntrospectionException, ReflectionException 从接口中复制的描述:MBeanServerConnection
该方法发现MBean为管理公开的属性和操作。- 指定者:
-
getMBeanInfo
在接口MBeanServerConnection
中 - 参数:
-
name
- 要分析的MBean的名称 - 返回:
-
一个
MBeanInfo
实例,允许检索此MBean的所有属性和操作。 - 抛出:
-
InstanceNotFoundException
- 未找到指定的MBean。 -
IntrospectionException
- 在内省期间发生异常。 -
ReflectionException
- 尝试调用动态MBean的getMBeanInfo时发生异常。
-
isInstanceOf
从接口中复制的描述:MBeanServerConnection
如果指定的MBean是指定类的实例,则返回true,否则返回false。
如果
name
不是MBean的名称,则此方法会抛出InstanceNotFoundException
异常。否则,让
X为name
命名的MBean,
L为X的ClassLoader,
N为X的MBeanInfo
中的类名。如果N等于
className
,则结果为true。否则,如果L成功加载
className
并且X是此类的实例,则结果为true。否则,如果L成功加载N和
className
,并且第二个类可从第一个类分配,则结果为true。否则,结果为false。
- 指定者:
-
isInstanceOf
在接口MBeanServerConnection
中 - 参数:
-
name
- MBean的ObjectName
。 -
className
- 类的名称。 - 返回:
- 如果根据上述规则指定的MBean是指定类的实例,则返回true,否则返回false。
- 抛出:
-
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。 - 参见:
-
instantiate
使用MBean服务器的
ClassLoader Repository
中注册的所有类加载器实例化对象。对象的类应具有公共构造函数。此方法返回对新创建对象的引用。新创建的对象未在MBean服务器中注册。此方法等效于
instantiate(className, (Object[]) null, (String[]) null)
。- 参数:
-
className
- 要实例化的对象的类名。 - 返回:
- 新实例化的对象。
- 抛出:
-
ReflectionException
- 封装了java.lang.ClassNotFoundException
或在尝试调用对象构造函数时发生的java.lang.Exception
。 -
MBeanException
- 对象的构造函数引发了异常 -
RuntimeOperationsException
- 封装了java.lang.IllegalArgumentException
:传递的参数className为null。
-
instantiate
Object instantiate(String className, ObjectName loaderName) throws ReflectionException, MBeanException, InstanceNotFoundException 使用由其
ObjectName
标识的类加载器实例化对象。如果加载器名称为null,则将使用加载MBean服务器的ClassLoader。对象的类应具有公共构造函数。此方法返回对新创建对象的引用。新创建的对象未在MBean服务器中注册。此方法等效于
instantiate(className, loaderName, (Object[]) null, (String[]) null)
。- 参数:
-
className
- 要实例化的MBean的类名。 -
loaderName
- 要使用的类加载器的对象名称。 - 返回:
- 新实例化的对象。
- 抛出:
-
ReflectionException
- 封装了java.lang.ClassNotFoundException
或在尝试调用对象构造函数时发生的java.lang.Exception
。 -
MBeanException
- 对象的构造函数引发了异常。 -
InstanceNotFoundException
- 指定的类加载器未在MBeanServer中注册。 -
RuntimeOperationsException
- 封装了java.lang.IllegalArgumentException
:传递的参数className为null。
-
instantiate
Object instantiate(String className, Object[] params, String[] signature) throws ReflectionException, MBeanException 使用MBean服务器
ClassLoader Repository
中注册的所有类加载器实例化对象。对象的类应具有公共构造函数。调用返回对新创建对象的引用。新创建的对象未在MBean服务器中注册。- 参数:
-
className
- 要实例化的对象的类名。 -
params
- 包含要调用的构造函数的参数的数组。 -
signature
- 包含要调用的构造函数的签名的数组。 - 返回:
- 新实例化的对象。
- 抛出:
-
ReflectionException
- 封装了java.lang.ClassNotFoundException
或在尝试调用对象构造函数时发生的java.lang.Exception
。 -
MBeanException
- 对象的构造函数引发了异常 -
RuntimeOperationsException
- 封装了java.lang.IllegalArgumentException
:传递的参数className为null。
-
instantiate
Object instantiate(String className, ObjectName loaderName, Object[] params, String[] signature) throws ReflectionException, MBeanException, InstanceNotFoundException 实例化对象。要使用的类加载器由其对象名称标识。如果加载器的对象名称为null,则将使用加载MBean服务器的ClassLoader。对象的类应具有公共构造函数。调用返回对新创建对象的引用。新创建的对象未在MBean服务器中注册。
- 参数:
-
className
- 要实例化的对象的类名。 -
loaderName
- 要使用的类加载器的对象名称。 -
params
- 包含要调用的构造函数的参数的数组。 -
signature
- 包含要调用的构造函数的签名的数组。 - 返回:
- 新实例化的对象。
- 抛出:
-
ReflectionException
- 包装了一个java.lang.ClassNotFoundException
或在尝试调用对象的构造函数时发生的java.lang.Exception
。 -
MBeanException
- 对象的构造函数抛出异常 -
InstanceNotFoundException
- 指定的类加载器未在MBean服务器中注册。 -
RuntimeOperationsException
- 包装了一个java.lang.IllegalArgumentException
:传入参数中的className为null。
-
deserialize
@Deprecated(since="1.5") default ObjectInputStream deserialize(ObjectName name, byte[] data) throws InstanceNotFoundException, OperationsException Deprecated.UsegetClassLoaderFor
to obtain the appropriate class loader for deserialization.在MBean的类加载器上下文中对字节数组进行反序列化。
- 实现要求:
-
默认情况下,此方法会抛出
UnsupportedOperationException
。 - 参数:
-
name
- 应该用于反序列化的MBean的名称。 -
data
- 要反序列化的字节数组。 - 返回:
- 反序列化的对象流。
- 抛出:
-
InstanceNotFoundException
- 未找到指定的MBean。 -
OperationsException
- 任何常见的输入/输出相关异常。
-
deserialize
@Deprecated(since="1.5") default ObjectInputStream deserialize(String className, byte[] data) throws OperationsException, ReflectionException Deprecated.UsegetClassLoaderRepository()
to obtain the class loader repository and use it to deserialize.在给定MBean类加载器的上下文中对字节数组进行反序列化。通过加载类
className
来找到类加载器,通过Class Loader Repository
。结果类的类加载器即为要使用的类加载器。- 实现要求:
-
默认情况下,此方法会抛出
UnsupportedOperationException
。 - 参数:
-
className
- 应该用于反序列化的类的名称。 -
data
- 要反序列化的字节数组。 - 返回:
- 反序列化的对象流。
- 抛出:
-
OperationsException
- 任何常见的输入/输出相关异常。 -
ReflectionException
- 无法通过类加载器存储库加载指定的类
-
deserialize
@Deprecated(since="1.5") default ObjectInputStream deserialize(String className, ObjectName loaderName, byte[] data) throws InstanceNotFoundException, OperationsException, ReflectionException Deprecated.UsegetClassLoader
to obtain the class loader for deserialization.在给定MBean类加载器的上下文中对字节数组进行反序列化。类加载器是加载名称为"className"的类的类加载器。指定用于加载指定类的类加载器的名称。如果为null,则将使用MBean服务器的类加载器。
- 实现要求:
-
默认情况下,此方法会抛出
UnsupportedOperationException
。 - 参数:
-
className
- 应该用于反序列化的类的名称。 -
loaderName
- 用于加载指定类的类加载器的名称。如果为null,则将使用MBean服务器的类加载器。 -
data
- 要反序列化的字节数组。 - 返回:
- 反序列化的对象流。
- 抛出:
-
InstanceNotFoundException
- 未找到指定的类加载器MBean。 -
OperationsException
- 任何常见的输入/输出相关异常。 -
ReflectionException
- 无法通过指定的类加载器加载指定的类。
-
getClassLoaderFor
返回用于加载命名MBean类的
ClassLoader
。- 参数:
-
mbeanName
- MBean的ObjectName。 - 返回:
-
用于该MBean的ClassLoader。如果l是MBean的实际ClassLoader,r是返回的值,则要么:
- r与l相同;或
- r
.loadClass(s)
的结果与l.loadClass(s)
对于任何字符串s相同。
- 抛出:
-
InstanceNotFoundException
- 如果未找到命名的MBean。
-
getClassLoader
返回命名的
ClassLoader
。- 参数:
-
loaderName
- ClassLoader的ObjectName。可能为null,在这种情况下返回MBean服务器自己的ClassLoader。 - 返回:
-
命名的ClassLoader。如果l是具有该名称的实际ClassLoader,r是返回的值,则要么:
- r与l相同;或
- r
.loadClass(s)
的结果与l.loadClass(s)
对于任何字符串s相同。
- 抛出:
-
InstanceNotFoundException
- 如果未找到命名的ClassLoader。
-
getClassLoaderRepository
ClassLoaderRepository getClassLoaderRepository()返回此MBeanServer的ClassLoaderRepository。
- 返回:
- 此MBeanServer的ClassLoaderRepository。
-
getClassLoaderRepository()
来获取类加载器存储库,并用它来进行反序列化。