Spring是否会向多个组件注入同一Service实例?结合代码实例问询
你的猜想完全正确!
默认情况下,Spring里被@Service(以及@Controller、@Component这类组件注解)标注的类,作用域都是单例(Singleton)。Spring容器只会为这个类创建唯一的一个实例,并且在整个应用运行期间复用它。
所以你代码里的SomeService,不管是注入到SomeController还是AnotherController,两个控制器拿到的都是同一个对象实例。
如果想验证的话,可以给SomeService加个打印实例哈希值的方法:
@Service public class SomeService { public void showInstance() { System.out.println("当前SomeService实例哈希:" + this.hashCode()); } }
然后在两个控制器的接口方法里调用这个方法,启动应用后访问接口,就能看到控制台输出的哈希值完全一样,直接证明是同一个实例。
当然,要是你手动给SomeService加上@Scope("prototype")这类修改作用域的注解,那每次注入都会生成新实例,但默认情况下肯定是单例模式。
内容的提问来源于stack exchange,提问作者BugsOverflow
相关产品推荐
相关产品推荐

