java - 在 servlet 的字段中拥有服务层对象

标签 java servlets jakarta-ee serializable transient

我目前正在使用 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/

相关文章:

java - 奇怪的 java.io.IOException : Server returned HTTP response code: 503 for URL

security - 我可以在机器上/浏览器中发现另一个用户的 LTPA2 token 吗?

java - 在Delphi和Java中是否有与 "result"变量类似的东西?

java - switch 语句的 Jacoco 覆盖率

jsp - request.getQueryString() 不返回查询字符串的哈希部分

java - 如何避免非法状态异常?

java - java 8中的 optional 不断从类返回toString方法

java - 数据绑定(bind)和验证 TableViewer?

java - 在Jboss eap 6.1中读取同一个war打包的镜像

java - Wicket 口更改标签/文本字段值