未调用 EJB 中覆盖的 toString 方法
Overridden toString method in EJB not invoked
我 studying/experimenting 使用 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());
}
..我得到以下输出,我想这就是我使用默认 toString 方法得到的结果。
Flight details: com.airline.service.__EJB31_Generated__FlightService__Intf___754270295
而不是
Flight details: FlightService [id=123, ...]
如我所料。据我所知,EJB 的所有其他功能都按预期工作。有人可以向我解释 toString 方法会发生什么吗?谢谢!
编辑:按照 Soumitri Pattnaik 的建议,它适用于显式创建的对象 (new FlightService())。
EDIT2:pastebin 上提供了完整的源代码。 FlightService.java, FlightDetails.java
该项目是在 Eclipse 中创建的,运行 在 Glassfish 4 上。
@EJB
不注入实际实例。 @EJB
注入一个自动生成的代理实例,该实例在池中定位实际实例并委托给它。根据使用的 EJB 实现(阅读:取决于使用的应用程序服务器),自动生成的代理 class 可能有自己的 toString()
,它可能会或可能不会使用您的 toString()
。你的显然完全忽略了它。
另请参阅:
- When using @EJB, does each managed bean get its own @EJB instance?
我 studying/experimenting 使用 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());
}
..我得到以下输出,我想这就是我使用默认 toString 方法得到的结果。
Flight details: com.airline.service.__EJB31_Generated__FlightService__Intf___754270295
而不是
Flight details: FlightService [id=123, ...]
如我所料。据我所知,EJB 的所有其他功能都按预期工作。有人可以向我解释 toString 方法会发生什么吗?谢谢!
编辑:按照 Soumitri Pattnaik 的建议,它适用于显式创建的对象 (new FlightService())。
EDIT2:pastebin 上提供了完整的源代码。 FlightService.java, FlightDetails.java 该项目是在 Eclipse 中创建的,运行 在 Glassfish 4 上。
@EJB
不注入实际实例。 @EJB
注入一个自动生成的代理实例,该实例在池中定位实际实例并委托给它。根据使用的 EJB 实现(阅读:取决于使用的应用程序服务器),自动生成的代理 class 可能有自己的 toString()
,它可能会或可能不会使用您的 toString()
。你的显然完全忽略了它。
另请参阅:
- When using @EJB, does each managed bean get its own @EJB instance?