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