实际上,使用 xml 和注解的注入在幕后是相同的。Xml 是旧时尚,而注解是较新的。
基本上,有两种注入类型。
按名字
按属性名称自动装配。Spring 容器查看在 XML 配置文件中将 autowire 属性设置为 byName 的 bean 的属性。然后,它会尝试将其属性与配置文件中由相同名称定义的 bean 进行匹配和连接。
您可以使用 xml 和注释为 bean 提供明确的名称。
@Service("BeanName")
@Component("BeanName")
@Controller("BeanName")
<bean name="BeanName" class="someclass"></bean>
并使用@Qualifier
注解注入 bean。
@Autowired
@Qualifier("BeanName")
并使用 xml
<bean id="MyBean2" class="MyBean2 class">
<property name="Property of MyBean2 which refers to injecting bean" ref="BeanName" />
</bean>
按类型
按属性数据类型自动装配。Spring 容器查看在 XML 配置文件中将 autowire 属性设置为 byType 的 bean 的属性。然后,如果属性的类型与配置文件中的一个 bean 名称完全匹配,它会尝试匹配和连接属性。如果存在多个此类 bean,则会引发致命异常。
默认的自动连线模式是 byType,所以 spring 会在自动连线中寻找匹配的类型。none
但是,旧版本的 Spring在注入时具有默认行为。如果你想使用 xml 注入 byType,你应该明确告诉 spring 容器。
例如 MyBean2 有一个对 MyBean 的引用,通过将 autowired 属性设置为 byType 它会自动处理注入。
<bean id="MyBean" class="MyBean class">
<property name="Property of MyBean2 which refers to injecting bean" ref="BeanName" />
</bean>
<bean id="MyBean2" class="MyBean2 class"
autowire="byType">
</bean>
它还取决于代码中注入的位置。有两种类型,setter getter 注入和构造函数注入。
注意:没有区别,@Controller
因为它们已经在春季环境中。
也可以看看
Spring Beans 自动布线