自动装配:
根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值
一般是这样调用实现
用自自动装配之后
<!--根据类型自动装配--> <!--<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 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>
优点
(1)自动装配可以大大地减少属性和构造器参数的指派。 (2)自动装配也可以在解析对象时更新配置。
缺点
(1)在property和constructor-arg设置中的依赖总是重载自动装配,我们无法对原始类型(如int,long,boolean等就是首字母小写的那些类型),还有String,Classes做自动装配。这是受限于设计。 (2)自动装配跟直接装配(explicit wiring)相比较,在准确性方便还是差那么点,虽然没有明确地说明,但是Spring还是尽量避免这种模棱两可的情况,导致出现没预料到的结果。 (3)Spring容器生成文档的工具可能会不能使用装配的信息。 (4)容器中多个bean的定义可能要对setter和构造器参数做类型匹配才能做依赖注入,虽然对于array,collection和map来说不是啥问题,但是对于只有单一值的依赖来讲,这就有点讲不清楚了,所以如果没有唯一的bean 定义,那只能抛出异常。