3

当我尝试在 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 遇到这种情况。

4

1 回答 1

1

注入成员

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

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

#init 中初始化的成员

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

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

于 2019-04-25T12:48:24.683 回答