类的toString()中'$'的含义是什么?

时间:2016-04-30 11:49:31

标签: tostring ejb-3.1 stateful

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

public UserWS() {

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

    }

有些观点我不清楚:

  1. 我第一次调用该类的方法时,构造函数调用了6次。为什么?我希望它只召唤一次。这些是构造函数调用:
  2. 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'的含义是什么?

1 个答案:

答案 0 :(得分:1)

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

在您的输出中,您对UserWS类的构造函数进行了2次实际调用,其余的是生成的类,这些类具有至少部分从UserWs构造函数复制的构造函数。 '$'只是Weld用来命名这些类的惯例的一部分。

您可以通过Weld here

找到有关如何生成这些内容的详细信息