一. 自动装配的实现
自动装配的目标是不需要使用ref属性或者ref标签去引用其他的bean,而是通过自动的方式引用其他的bean。SpringIOC容器是可以自动装配bean的,需要的仅仅是在bean标签使用autowire属性指定自动装配的方式。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
bean标签中使用autowire属性设置自动装配
autowire 表示自动装配,常用两个装配方式:
- byType : 根据类型自动装配,但是如果IOC容器中存在多个相同类型的bean,则无法判断到底使用哪个,报错。
- byName : 根据名称自动装配,必须要求person这个bean的属性要求和被自动装配的bean的名称要一致
-->
<bean id="person" class="com.nhkj.autowire.Person" p:name="jjm" p:age="30" autowire="byName">
<!-- <property name="car" ref="car"></property> -->
</bean>
<bean id="car" class="com.nhkj.autowire.Car" p:barnd="Chery" p:color="gold" p:maxSpeed="200" p:price="60000"></bean>
<bean id="car2" class="com.nhkj.autowire.Car" p:barnd="BYD" p:color="gold" p:maxSpeed="200" p:price="60000"></bean>
</beans>
二. 自动装配的优缺点
- 在bean的配置文件里面设置autowire属性进行自动装配将会装配bean的所有属性,但是如果只希望装配个别的属性的时候,autowire这个时候就显得不够灵活了
- autowire属性要么根据名称要么根据类型自动装配,不能够两者兼而有之
- 一般情况下,在基于xml的Spring配置中,很少去使用自动装配的功能,因为和自动装配带来的好处相比,明确清晰的配置文档更具有说服力。
- 在后期的注解过程中,我们会大量的使用autowire进行自动装配,一般在三层架构的开发中,控制层引用Service层【业务层】,业务层引用数据访问层,都只会在IOC容器中存在一个bean,所以不会存在根据类型匹配不上,或者匹配过多的问题。