【发布时间】:2018-09-26 21:35:12
【问题描述】:
此时我很困惑,我知道所有 Spring Boot 应用程序 bean 都是单例的,根据我的理解,如果我们有使用 @Service 注释的类,那么 bean 只能在一个类中是 @Autowired(纠正我如果我错了)这里的代码可以正常工作,但我想了解它是如何工作的?一个 bean 如何在两个不同的类中成为@Autowired?
SampleService bean 如何同时在 SampleController2 和 SampleController3 中成为 @Autowired?
这是推荐的方法吗?在这种情况下,两个线程可以并行更改 bean 内的数据?
SampleController2
@RestController
@RequestMapping(value="samplemock")
public class SampleController2 {
@Autowired
private SampleService2 sampleservice2;
@RequestMapping(value="/mock1",method=RequestMethod.GET)
public void mockCall1() {
sampleservice2.m1();
}
}
SampleController3
@RestController
@RequestMapping(value="samplemock2")
public class SampleController3 {
@Autowired
private 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");
}
}
【问题讨论】:
-
要理解这一点,您必须了解依赖注入。依赖注入是关键字 Autowired 背后的概念。换句话说,两个控制器中的 sampleService2 变量都是简单的声明,这意味着没有关联的实例对象。请记住,Spring 核心负责在需要时单独创建实例。
-
我经历了依赖注入,你的意思是它会创建两个实例?还是单个实例?
-
单例并不意味着它只能在一个地方使用。您可以在两个不同的地方使用相同的实例
-
肯定会创建两个实例,因为这些bean不一定同时被调用。
-
@Solace,你能给我更多信息吗?单例 bean 如何在不同的地方自动装配?只是我想简单解释一下,有一个单例 bean,它与 controller1 中的引用相关联,同样的 bean 如何与 controller2 引用相关联?
标签: java spring-boot