java - servlet 中的资源注释触发 squid :S2226

标签 java sonarqube sonarlint sonarlint-eclipse

当我尝试在 servlet 中使用 Resource 注释时,Sonar 触发规则 squid:S2226“Servlet 不应具有可变实例字段”并告诉我将变量设置为最终变量或静态变量。

但是资源注入(inject)和 final 和 static 变量不起作用。

在 servlet 中不再推荐使用 Sonar 或资源注入(inject)中的错误吗?

public class MyServlet extends HttpServlet {
    @Resource(name = "jdbc/database")
    private DataSource dataSource;
}

ServletConfig 出现了类似的难题

private ServletConfig config;

@Override
public void init(ServletConfig config) throws ServletException {
    this.config = config;
}

这里,config 不能成为最终的,但是让它静态触发另一个规则 squid:S2696:“实例方法不应该写入“静态”字段”

如果有用的话,我用 SonarLint for Eclipse 3.3.1.201712071600 遇到过这种情况。

最佳答案

注入(inject)的成员

关于注入(inject)的成员(@EJB、@Resource、...)你是对的,并且有(现在已修复)Issues在 SONARJAVA 问题跟踪器中。

例如SONARJAVA-2744
标题:“S2226 不应为使用@Resource 注释的字段引发问题”
已通过安全规则 5.4 版解决

成员在#init中初始化

还有另一个(已解决的)问题:SONARJAVA-1458
在#init 中初始化的成员不应触发 squid:S2226。

根据ServletConfig:
通常不需要保留对 ServletConfig 的引用,因为可以使用 GenericServlet#getServletConfig 访问它。

关于java - servlet 中的资源注释触发 squid :S2226,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49427667/

相关文章:

java - 来自构造函数的参数较少的构造函数

java - 使用 TreeMap 时出现 ClassCastException

maven - Sonar 无法连接到 mySQL 总是尝试 jdbc :h2:tcp://localhost/sonar

jenkins - 为什么来自 jenkins 的 sonarqube 调用因 HTTP 500 失败?

android - Android Lint在Sonarqube中没有显示任何问题

java - New FileReader 的 SonarQube 问题

eclipse - 如何让 SonarLint 在 Eclipse 中的大量项目启动速度更快?

java - 在 Java 中使用蒙版图像的十六进制进行 map 碰撞的问题

java - "Serializable"类中的字段应该是 transient 或可序列化的鱿鱼 : S1948

java - 如果 Map 中的所有 List 值为空/非空,则使用 Streams 返回 boolean 值