在这个关于spring依赖注入的例子中
在运行最终测试类时,在此行之后:
MySpringBeanWithDependency test = (MySpringBeanWithDependency) factory
.getBean("mySpringBeanWithDependency");
writer 类的哪个实现会被注入?测试类仍然负责创建实际实现并在调用 Writer 上的业务方法之前将其注入。这是真的吗?
在这个关于spring依赖注入的例子中
在运行最终测试类时,在此行之后:
MySpringBeanWithDependency test = (MySpringBeanWithDependency) factory
.getBean("mySpringBeanWithDependency");
writer 类的哪个实现会被注入?测试类仍然负责创建实际实现并在调用 Writer 上的业务方法之前将其注入。这是真的吗?
在基于注解的示例和基于 XML 的示例中,Spring 都会将NiceWriter
bean 注入到MySpringBeanWithDependency
bean 中。
对于注释示例,这是因为NiceWriter
该类被注释了@Service
(而Writer
该类没有注释),Spring 将通过类路径扫描发现这一点并将其自动装配到MySpringBeanWithDependency
.
对于 XML 示例,这是因为NiceWriter
该类用于定义 id 的 bean writer
,它被引用为 id 的 bean 的“writer”属性mySpringBeanWithDependency
。
在这两种情况下,MySpringBeanWithDependency
bean 都使用通过 Spring 注入的依赖项进行实例化,因此可以使用。它不负责管理其IWriter
依赖关系。这就是为什么依赖注入(简称 DI)通常与控制反转(简称 IoC)齐头并进的原因。Spring 提供了一个使用 DI 的 IoC 容器。