【问题标题】:What is the meaning of '$' in toString() of a class?类的 toString() 中的“$”是什么意思?
【发布时间】:2016-04-30 11:49:31
【问题描述】:

我有一个名为“UserWS”的有状态会话 bean。在“UserWS”的构造函数中,我编写了类的 toString()。

public UserWS() {

        System.out.println("In constructor:" + this.toString());

    }

有些地方我不清楚:

  1. 第一次调用那个类的方法,构造函数调用了6次。为什么?我希望它只调用一次。这些是构造函数调用:
In constructor: ws.UserWS$Proxy$_$$_WeldClientProxy@22c9b87b
In constructor: ws.UserWS$Proxy$_$$_Weld$EnterpriseProxy$@50933ff8
In constructor: ws.UserWS@303709bb
In constructor: ws.UserWS$$$view2@6872a8eb
In constructor: ws.UserWS$$$view2@4e75aedd
In constructor: ws.UserWS@53c4e19d
  1. 类的toString()结果中的'$'或'$Proxy'是什么意思?

【问题讨论】:

    标签: tostring ejb-3.1 stateful


    【解决方案1】:

    当 EJB 或 CDI 等 Java 框架与您编写的类一起使用时,该框架必须根据您的类生成额外的类,以提供注入、安全性或事务等服务。这些通常类似于代理,它拦截来自客户端代码的方法请求,添加额外的服务,然后调用原始类中的方法。

    在您的输出中,您有 2 次实际调用 UserWS 类的构造函数,其余的是生成的类,它们的构造函数至少部分从您的 UserWs 构造函数复制。 “$”只是 Weld 用来命名这些类的约定的一部分。

    您可以找到更多关于 Weld here 生成它们的详细信息

    【讨论】:

      猜你喜欢
      • 2014-01-12
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      相关资源
      最近更新 更多