Spring自动装配

XML配置里的Bean自动装配

  • Spring IOC容器可以自动装配Bean。需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式
  • byType(根据类型自动装配):若IOC容器中有多个与目标Bean类型一致的Bean。在这种情况下,Spring将无法判定哪个Bean最适合属性,所以不能执行自动装配。
  • byName(根据名称自动装配):必须将目标Bean的名称和属性名设置完全相同。
  • constructor(通过构造器自动装配):当Bean中存在多个构造器时,此种自动装配方式将会很复杂。不推荐使用

自动装配byName实例:

1
2
3
4
5
6
7
8
9
<!-- 通过p命名空间为bean的属性赋值,需要先导入 p 命名空间,相对于传统的配置更加的简洁 -->
<bean id = "address" calss = "com.spring.hellowrld.address" p:city = "Beijing" p:street = "HuiLongGuan"></bean>

<!-- 通过p命名空间为bean的属性赋值,需要先导入 p 命名空间,相对于传统的配置更加的简洁 -->
<bean id = "car" calss = "com.spring.hellowrld.Car" p:brand = "Audi" p:price = "30000"></bean>

<!-- 可以使用 autowire 属性指定自动装配的方式
byName 根据 bean 的名字和当前bean的 setter 风格的属性名进行自动装配,若有匹配的,则进行自动装配,若没有匹配的,则不装配 -->
<bean id = "Person" calss = "com.spring.hellowrld.person" p:name = "Tom" autowire = "byName"></bean>

自动装配byType实例:

1
2
3
4
5
6
7
8
<!-- 通过p命名空间为bean的属性赋值,需要先导入 p 命名空间,相对于传统的配置更加的简洁 -->
<bean id = "address2" calss = "com.spring.hellowrld.address" p:city = "Beijing" p:street = "HuiLongGuan"></bean>

<!-- 通过p命名空间为bean的属性赋值,需要先导入 p 命名空间,相对于传统的配置更加的简洁 -->
<bean id = "car2" calss = "com.spring.hellowrld.Car" p:brand = "Audi" p:price = "30000"></bean>

<!-- byType 根据 bean 的类型和当前 bean 的属性的类型进行自动装配,若IOC容器中有一个以上的类型匹配的bean,则抛异常。 -->
<bean id = "Person2" calss = "com.spring.hellowrld.person" p:name = "Rose" autowire = "byType"></bean>

XML配置里的Bean自动装配的缺点

  • 在 Bean 配置文建立设置 autowire 属性进行自动装配将会装配 Bean 的所有属性。然而,若值希望装配个别属性时, autowire属性就不够灵活了。
  • autowire 属性要么根据类型自动装配,要么根据名称自动装配,不能两者兼而有之。
  • 一般情况下,在实际项目中很少使用自动装配功能,因为和自动装配功能所带来的好处比起来,明确清晰的配置文档更有说服力一些。
-------------本文结束 感谢您的阅读-------------
文章对我有益,我要小额赞赏...