spring自动装配

spring可以使用 XML 配置文件中的<constructor-arg><property>元素来注入 ,也可以通过<bean>元素中的autowire来自动装配(自动注入)

<bean id="***" class="***" autowire=""></bean>

共有下面四种情况:

1.byName:由属性名自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byName。然后尝试匹配,并且将它的属性与在配置文件中被定义为相同名称的 beans 的属性进行连接,没有相同名称的什么都不做。

2.byType:由属性数据类型自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byType。然后如果它的类型匹配配置文件中的一个确切的 bean 名称,它将尝试匹配和连接属性的类型。如果存在不止一个这样的 bean,则一个致命的异常将会被抛出,没有相同类型的什么都不做。(如果存在多个相同类型的Bean候选项,可以通过设置其中几个Bean为autowire-candidate="false",来设置自动装配时忽略这几个bean,也可以设置primary=“true”来设置当前bean作为自动装备的值,直接忽略其他项,这个属性不对byName有效,也就是说如果是通过byName自动装配,依然可以找到当前Bean并自动装配)

3.constructor:类似于 byType,但该类型适用于构造函数参数类型。如果在容器中没有一个构造函数参数类型的 bean,则一个致命错误将会发生(工作过程首先根据bean的name查找(类似于byName),此时如果找到和构造参数中相同名称的bean就注入,可以有多个相同类型的bean;否则就根据byType模式查找,此时如果有多个相同类型的bean就会报错,可以通过设置autowire-candidate="false"或primary=“true”来避免,最后还是没有找到就会报错)。如果Bean的自动装配模式为constructor,而候选bean的primary=“true”,那么将直接注入这个bean,如果候选bean同时设置为primary=“true”和autowire-candidate="false",这个bean将不会作为自动装配候选项,不能由多个自动装配候选项设置为primary=“true”。

4.no:默认模式,不自动装配,需要通过<constructor-arg><property>来手动注入。

<property>和<constructor-arg>将会覆盖上面这些配置。子bean也不会继承上面这些配置,但是内部bean将继承外部bean的配置

也可以在<Beans>中通过default-autowire进行设置。

posted @ 2019-05-22 10:39  yuby  阅读(796)  评论(0编辑  收藏  举报