3 回答
TA贡献1839条经验 获得超15个赞
这是Spring 在启动时所做的事情的简化视图:
// Create bean: sampleService2
SampleService2 sampleService2 = new SampleService2();
// Create bean: sampleController2
SampleController2 sampleController2 = new SampleController2();
sampleController2.sampleservice2 = sampleService2; // because @Autowired
// Create bean: sampleController3
SampleController3 sampleController3 = new SampleController3();
sampleController3.sampleservice2 = sampleService2; // because @Autowired
如您所见,单例 beansampleService2自动装配到sampleController2和 中sampleController3。
这些 bean 被添加到存储库中,因此您可以在以后的任何时间点按名称或类型查找它们。
TA贡献1821条经验 获得超6个赞
默认情况下,正如您提到的,所有 Spring bean 都是单例,但您的第二个假设是错误的:同一个 bean 可以在许多其他 bean 中自动装配。
事实上,这就是他们成为单身人士的全部意义所在。
这也意味着两个不同的线程确实可以改变同一个 bean 的状态。出于这个原因,您大部分时间都希望保持您的 bean 无状态。
如果您真的需要为每个自动装配的位置拥有一个不同的 bean 实例,您可以将该 bean 的范围更改为prototype
. 请参阅Spring bean 范围文档。
添加回答
举报