【发布时间】:2020-04-10 06:45:02
【问题描述】:
假设我有基于 Spring 框架的项目中的下一个类:
interface I {
String getName()
}
@Component
class I1 implements I {
@Override
String getName() {return "I1"}
}
@Component
class I2 implements I {
@Override
String getName() {return "I1"}
}
我想使用@Autowired 方法将它们全部收集到地图中:
@Component
public class A {
private Map<I> map = new HashMap<>()
@Autowired
public registerI(I i) {
map.put(i.getName(), i)
}
}
我应该让这个方法registerI同步吗?我的意思是,Spring 可以同时在多个线程中调用此方法吗?或者这个方法会被顺序调用?
谢谢
【问题讨论】:
-
你可以试试看。为什么会被多次调用?
-
Map应该是List对吧? -
@Deadpool 在这种情况下没关系。我想知道 - 我是否需要在这里使用同步集合。
-
@f1sh 在这种情况下我没有重现任何竞争条件错误,但我仍然不确定它是否是正确的代码。
-
为什么不在方法中使用 List 作为参数?这将确保只有一个方法调用。
标签: java spring spring-boot dependency-injection