我正在研究/试验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.java,FlightDetails.java 该项目是在Eclipse中创建的,在Glassfish 4上运行。
答案 0 :(得分:1)
@EJB
没有注入实际的实例。 @EJB
注入一个自动生成的代理实例,该实例在池中定位实际实例并委托给它。根据所使用的EJB实现(读取:取决于所使用的appserver),自动生成的代理类可能有自己的toString()
,可能会也可能不会使用您的toString()
。你的人显然完全无视它。