当我尝试在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中遇到这种情况,如果它有用的话。
答案 0 :(得分:1)
注入的成员
您对注入的成员(@ EJB,@ Resource等)是正确的,并且SONARJAVA问题跟踪器中有Issues(现已修复)。
例如SONARJAVA-2744
标题:“ S2226不应在使用@Resource注释的字段中引起问题”
使用安全规则5.4版解决了
在#init
中初始化的成员还有另一个(已解决的)问题:SONARJAVA-1458
在#init中初始化的成员不应触发squid:S2226。
根据 ServletConfig :
通常不需要保存对 ServletConfig 的引用,因为可以使用 GenericServlet#getServletConfig 对其进行访问。