未调用EJB中的重写toString方法

时间:2016-03-08 09:39:17

标签: java-ee ejb tostring

我正在研究/试验EJB。我有一个带有重写的toString方法的EJB:

@Stateless
@LocalBean
public class FlightService {
... 
@Override
public String toString() {
    return "FlightService [id=" + id + ", from=" + from + ", to=" + to + ", price=" + price + ", airplaneModel="
            + airplaneModel + "]";
}

}

在我的servlet中,我将这个EJB注入一个变量,如下所示:

@EJB
private FlightService fs;

然而,当我想把它打印出来时..

if (fs != null){
    out.println("Flight details: " + fs.toString());
}

..我得到以下输出,这是我用defaul toString方法得到的,我想。

Flight details: com.airline.service.__EJB31_Generated__FlightService__Intf___754270295

而不是

Flight details: FlightService [id=123, ...]
正如我所料,

据我所知,EJB的所有其他功能都按预期工作。有人可以向我解释一下toString方法会发生什么吗?谢谢!

编辑:它与明确创建的对象(新的FlightService())一起使用,正如Soumitri Pattnaik所建议的那样。

EDIT2:pastebin上提供完整的源代码。 FlightService.javaFlightDetails.java 该项目是在Eclipse中创建的,在Glassfish 4上运行。

1 个答案:

答案 0 :(得分:1)

@EJB没有注入实际的实例。 @EJB注入一个自动生成的代理实例,该实例在池中定位实际实例并委托给它。根据所使用的EJB实现(读取:取决于所使用的appserver),自动生成的代理类可能有自己的toString(),可能会也可能不会使用您的toString()。你的人显然完全无视它。

另见: