Spring 的xml自动装配

Posted on 2024-01-11 23:16  弯弓射雕的男人  阅读(3)  评论(0编辑  收藏  举报

自动装配:

根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值

 

一般是这样调用实现

用自自动装配<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!--根据类型自动装配-->
<bean id="userController" class="com.atguigu.spring6.iocxml.auto.controller.UserController"
autowire="byType">
</bean>
<bean id="userService" class="com.atguigu.spring6.iocxml.auto.service.UserServiceImpl"
autowire="byType">

</bean>
<bean id="userDao" class="com.atguigu.spring6.iocxml.auto.dao.UserDaoImpl">
</bean>

<!--根据名称自动装配
使用bean标签的autowire属性设置自动装配效果
-->
<bean id="userController" class="com.atguigu.spring6.iocxml.auto.controller.UserController"
autowire="byName">
</bean>
<bean id="userService" class="com.atguigu.spring6.iocxml.auto.service.UserServiceImpl"
autowire="byName">
</bean>
<bean id="userDao" class="com.atguigu.spring6.iocxml.auto.dao.UserDaoImpl">
</bean>
</beans>

 

  使用bean标签的autowire属性设置自动装配效果

   自动装配方式:byName 时必须有一样的名字

   自动装配方式:byType

  byType:根据类型匹配IOC容器中的某个兼容类型的bean,为属性自动赋值

   若在IOC中,没有任何一个兼容类型的bean能够为属性赋值,则该属性不装配,即值为默认值null

   若在IOC中,有多个兼容类型的bean能够为属性赋值,则抛出异常NoUniqueBeanDefinitionException

 

优点

(1)自动装配可以大大地减少属性和构造器参数的指派。

(2)自动装配也可以在解析对象时更新配置。

 缺点

(1)在property和constructor-arg设置中的依赖总是重载自动装配,我们无法对原始类型(如int,long,boolean等就是首字母小写的那些类型),还有String,Classes做自动装配。这是受限于设计。

(2)自动装配跟直接装配(explicit wiring)相比较,在准确性方便还是差那么点,虽然没有明确地说明,但是Spring还是尽量避免这种模棱两可的情况,导致出现没预料到的结果。

(3)Spring容器生成文档的工具可能会不能使用装配的信息。

(4)容器中多个bean的定义可能要对setter和构造器参数做类型匹配才能做依赖注入,虽然对于array,collection和map来说不是啥问题,但是对于只有单一值的依赖来讲,这就有点讲不清楚了,所以如果没有唯一的bean
定义,那只能抛出异常。