lou*_*mbo 6 java spring sonarqube
我的 Spring 应用程序和 SonarQube 遇到了问题。SQ 正在用“用“@Autowired”、“@Resource”、“@Inject”或“@Value”注释这个成员,或将其删除。” 在实例变量 mapLoadedByDatabaseCalls 上
示例 1:
@Service
public class Service implements InitializingBean {
@Autowired
private Dao dao;
private Map<Object, Object> mapLoadedByDatabaseCalls;
@Override
public void afterPropertiesSet() throws Exception {
mapLoadedByDatabaseCalls= new HashMap<>(Object.class);
....
}
}
Run Code Online (Sandbox Code Playgroud)
示例 2:
@Service
public class Service {
@Autowired
private Dao dao;
private Map<Object, Object> mapLoadedByDatabaseCalls;
@PostConstruct
private void setMap() {
mapLoadedByDatabaseCalls= new HashMap<>(Object.class);
....
}
}
Run Code Online (Sandbox Code Playgroud)
DI 完成后实例化变量的正确方法是什么?
我相信这是笨拙的并且您的原始代码更好,但这将消除 SonarQube 投诉。在 @Bean 中初始化您的映射,然后将其引用为 @Autowired。使用@PostConstruct 中的数据加载地图。
@Bean
public Map<Object, Object> getMapLoadedByDatabaseCalls() {
return new HashMap<>(Object.class);
}
@Autowired
private Map<Object, Object> mapLoadedByDatabaseCalls;
@PostConstruct
private void setMap() {
...
// load data into the map
mapLoadedByDatabaseCalls.put(key, value);
....
}
Run Code Online (Sandbox Code Playgroud)