Vic*_*r S 6 java spring dependency-injection spring-annotations sonarqube
我有一段带有字段注入的代码,我试图将其转换为使用构造函数注入。初始代码如下所示:
@Autowired
private Environment env;
@Autowired
private YYYAdaptor yyyAdaptor;
@Autowired
private JAXBContext jaxbContext;
Run Code Online (Sandbox Code Playgroud)
这就是我重写它的方式:
private Environment env;
private YYYAdaptor yyyAdaptor;
private JAXBContext jaxbContext;
@Autowired
public YYYResource(Environment env, YYYAdaptor yyyAdaptor,
@Qualifier("YYYYReq") JAXBContext jaxbContext) {
this.env = env;
this.yyyAdaptor = yyyAdaptor;
this.jaxbContext = jaxbContext;
}
Run Code Online (Sandbox Code Playgroud)
这样做给了我一个声纳扫描的严重漏洞,“此成员”引用了每个声明的变量:
用“ @Autowired”,“ @ Resource”,“ @ Inject”或“ @Value”注释此成员,或将其删除
我可以避免使用声场注入同时避免声纳拟合的最佳方法是什么?
查看 SonarQube 规则RSPEC-4288:Spring 组件应该使用构造函数注入。尽管它没有解释为什么final使用被触发为不合规,但有一个合规的代码示例。初始化字段以null使其兼容 SonarQube:
private Environment env = null;
private YYYAdaptor yyyAdaptor = null;
private JAXBContext jaxbContext = null;
Run Code Online (Sandbox Code Playgroud)
然而SonarQube所说的并不神圣,而且充满了很多误报。这些静态分析器解决了值得进一步反思的问题,但不是明确的,并且是基于有意见的人制定的规则。
就我个人而言,我会将这个问题标记为无法修复,并声明字段以final使对象不可变:
private final Environment env;
private final YYYAdaptor yyyAdaptor;
private final JAXBContext jaxbContext;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |