什么是com.sun.proxy。$ Proxy

我已经看到,当错误在不同的框架(例如,实现EJB规范的框架或某些JPA提供程序的框架)中发生深层错误时,stacktrace将包含诸如这样的类com.sun.proxy.$Proxy。我知道什么是代理,但是我正在寻找更技术性和更特定于Java的答案。

  1. 这些是什么?
  2. 它们是如何创建的?
  3. 与JVM有什么关系?它们是特定于JVM实现的吗?

回答:

  1. 代理是在运行时创建和加载的类。这些类没有源代码。我知道您想知道如果没有针对他们的代码,如何让他们做一些事情。答案是,在创建它们时,您指定一个实现的对象,该对象InvocationHandler定义了在调用代理方法时要调用的方法。

  2. 您可以通过调用创建它们

    Proxy.newProxyInstance(classLoader, interfaces, invocationHandler)

参数为:

1. `classLoader`。一旦生成了类,就使用该类加载器加载它。

2. `interfaces`。一类必须全部是接口的类对象。生成的代理实现所有这些接口。

3. `invocationHandler`。这就是您的代理知道调用方法时该怎么做的方式。这是一个实现的对象`InvocationHandler`。当从任何受支持的接口,或一个方法`hashCode`,`equals`或者`toString`被调用,该方法`invoke`调用的处理程序中,经过`Method`用于向被调用的方法和传递的参数对象。

有关更多信息,请参见Proxy该类的文档。

  1. 1.3版之后的JVM的每个实现都必须支持这些实现。它们以特定于实现的方式加载到JVM的内部数据结构中,但可以保证正常工作。

以上是 什么是com.sun.proxy。$ Proxy 的全部内容, 来源链接: utcz.com/qa/422115.html

回到顶部