1.1 Spring 自动装配‘ByName’
在配置文件中我们配置Bean文件,如果Bean的属性设置了autowire=“ByName”表示自动装备。即表示Spring容器会查找该Bean配置的属性(对应的Pojo类的属性)并设置这个属性的值为对应的Bean。通俗来讲就是,实体类中有属性想获得而不想在Bean内的重新写属性配置。看图你就明白了
图一(使用Setter方法内部注入)
图二(使用autowire自动装配byName)
1.2Spring 自动装配‘ByType’
这种模式由属性类型指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType。然后,如果它的 type 恰好与配置文件中 beans 名称(id)中的一个相匹配,它将尝试匹配和连接它的属性。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。看图
图一(Pojo中的属性类型)
图二(使用autowire自动装配byType)
2.1Spring 自动装配constructor。这种模式与 byType 非常相似,但它应用于构造器参数。(不多介绍)
模式名称 |
描述 |
No |
默认的设置,它意味着没有自动装配 |
byName |
由属性名自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byName。然后尝试匹配,并且将它的属性与在配置文件中被定义为相同名称的 beans 的属性进行连接。 |
byType |
由属性数据类型自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byType。然后如果它的类型匹配配置文件中的一个确切的 bean 名称,它将尝试匹配和连接属性的类型。如果存在不止一个这样的 bean,则一个致命的异常将会被抛出。 |
Constructor |
类似于 byType,但该类型适用于构造函数参数类型。如果在容器中没有一个构造函数参数类型的 bean,则一个致命错误将会发生。 |
autodetect |
Spring首先尝试通过 constructor 使用自动装配来连接,如果它不执行,Spring 尝试通过 byType 来自动装配。 |
总结:Spring 容器可以在不使用<property>
元素的情况下自动装配相互协作的 bean 之间的关系,这有助于减少编写一个大的基于 Spring 的应用程序的 XML 配置的数量。