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

时间:2018-03-22 11:36:06

标签: java sonarqube sonarlint sonarlint-eclipse

当我尝试在servlet中使用Resource注释时,Sonar触发规则squid:S2226" Servlet不应该有可变的实例字段"并告诉我将变量设为final或static。

但是资源注入不起作用以及最终和静态变量。

在servlet中不再推荐使用声纳或资源注入的错误吗?

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中遇到这种情况,如果它有用的话。

1 个答案:

答案 0 :(得分:1)

注入的成员

您对注入的成员(@ EJB,@ Resource等)是正确的,并且SONARJAVA问题跟踪器中有Issues(现已修复)。

例如SONARJAVA-2744
标题:“ S2226不应在使用@Resource注释的字段中引起问题”
使用安全规则5.4版解决了

在#init

中初始化的成员

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

根据 ServletConfig
通常不需要保存对 ServletConfig 的引用,因为可以使用 GenericServlet#getServletConfig 对其进行访问。