【发布时间】:2018-06-21 06:19:26
【问题描述】:
从这个解决方案中我知道我可以在 spring 中自动装配静态字段。
@Component
public class AdminUtil {
private static IAirportService airportService;
@Autowired
public AdminUtil(IAirportService portService) {
AdminUtil.airportService = portService;
}
...
}
但是声纳说:静态字段不应该在构造函数中更新 (RSPEC-3010)
有没有其他方法可以在 spring 中自动装配静态字段?还是我忽略这个?
【问题讨论】:
-
不要。你为什么还要这样做?很抱歉,但这表明对控制反转甚至
static的含义存在根本性的误解。注意 SonarQube 的警告 - 不要这样做。 -
这可能有什么用途?
-
@BoristheSpider 在这个 util 文件中包含一些转换器,计算等方法。我需要在一个方法中使用它。
-
但是在你有一个实例之前你不能 - 这就是声纳警告的意思。出于所有意图和目的,这使它成为非静态的。您创建的东西是 Spring Bean - 因此会发生自动装配。所以注入你需要的bean。使用静态方法破坏了 IoC 并违背了它的目的 - 更好的解耦,因此更高的可测试性。
标签: java spring dependency-injection sonarqube autowired