为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不同的地方自动装配 Singleton bean spring boot

如何在不同的地方自动装配 Singleton bean spring boot

哈士奇WWW 2021-10-13 15:51:29
在这一点上我很困惑,我知道所有的 Spring Boot 应用程序 bean 都是单例的,根据我的理解,如果我们用@Service注释注释了 bean 只能@Autowired在一个类中(如果我错了,请纠正我)这里是代码工作正常,但我想了解它是如何工作的?一个bean如何@Autowired在两个不同的类中?如何SampleService豆可以@Autowired在SampleController2和SampleController3在同一时间?这是推荐的方法吗?在这种情况下,两个线程可以并行更改 bean 中的数据吗?SampleController2@RestController@RequestMapping(value="samplemock")public class SampleController2 {@Autowiredprivate SampleService2 sampleservice2;@RequestMapping(value="/mock1",method=RequestMethod.GET)public void mockCall1() {    sampleservice2.m1();   }}SampleController3@RestController@RequestMapping(value="samplemock2")public class SampleController3 {@Autowiredprivate SampleService2 sampleservice2;@RequestMapping(value="/mock1",method=RequestMethod.GET)public void mockCall1() {    sampleservice2.m1();   } }SampleService2@Service public class SampleService2 {public void m1() {    System.out.println("bean is autowired");    } }
查看完整描述

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 被添加到存储库中,因此您可以在以后的任何时间点按名称或类型查找它们。


查看完整回答
反对 回复 2021-10-13
?
达令说

TA贡献1821条经验 获得超6个赞

默认情况下,正如您提到的,所有 Spring bean 都是单例,但您的第二个假设是错误的:同一个 bean 可以在许多其他 bean 中自动装配。

事实上,这就是他们成为单身人士的全部意义所在。

这也意味着两个不同的线程确实可以改变同一个 bean 的状态。出于这个原因,您大部分时间都希望保持您的 bean 无状态。

如果您真的需要为每个自动装配的位置拥有一个不同的 bean 实例,您可以将该 bean 的范围更改为prototype. 请参阅Spring bean 范围文档。


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信