当我尝试在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
不能成为final,但是使其成为静态触发另一个规则squid:S2696:“实例方法不应该写入”static“字段”
如果有用,我会使用SonarLint for Eclipse 3.3.1.201712071600来满足这种情况。
注入会员
您注意成员(@EJB,@ Resource,...)是正确的,并且在SONARJAVA问题跟踪器中有(现已修复)Issues。
例如SONARJAVA-2744 标题:“S2226不应该为使用@Resource注释的字段引发问题” 解决了安全规则的5.4版
成员在#init中初始化
还有另一个(已解决的)问题:SONARJAVA-1458 在#init中初始化的成员不应该触发squid:S2226。
根据ServletConfig: 通常不需要保存对ServletConfig的引用,因为可以使用GenericServlet#getServletConfig访问它。