当我尝试在 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/