我目前正在使用 Hibernate 编写 J2EE 应用程序并在 Tomcat 上运行它。该项目分为几个部分(DAO、服务、 Controller (servlet)、 View (JSP))。 DAO 和服务是单例的。为了分离 Controller 和服务,我将服务接口(interface)的引用存储为 servlet 的字段。 Sonarqube 告诉我们这些字段必须标记为 transient ,或者服务类必须实现 Serialized,或者这些字段应该被删除。那么,在 servlet 中拥有字段是不是不好呢?如果我只是将它们标记为 transient 怎么办?
最佳答案
只要生成的对象图是不可变的或无状态的,将对象引用存储在 servlet 的实例字段中是完全安全的。如果不是这种情况,那么您将遇到并发问题。
从技术上讲,这些字段需要有 transient
修饰符应用于它们,因为某些容器将使用序列化在受控关闭期间(或任何其他方便的时间)保存 servlet 的状态。这样做的结果是您的 servlet 需要实现 private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException
恢复您的服务引用字段的方法。
阅读java.io.Serializable javadoc 了解更多信息。
关于java - 在 servlet 的字段中拥有服务层对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40032439/