什么是自动装配
装配即是创建应用对象之间协作关系的行为,其实也就是注入依赖的属性。
例如:
/**
* 描述鞋子的类
*/
public class Boot{
}
/**
* 描述人的类
*/
public class Person{
private Boot boot;
public Person(){
}
public Person(Boot boot){
this.boot = boot;
}
public void setBoot(Boot boot){
this.boot = boot;
}
}
在这个非常简单的Person类中,拥有一个属性boot(鞋子),也就可以说Person类依赖于类Boot,或者说Boot类是Person类的依赖。
注入依赖的意思就是说,在定义一个bean对象(这里指的是Person对象)的时候,需要给指定的属性赋值(这里可以指的是boot属性)。
自动装配:在定义一个bean的时候,自动给某一些属性注入基本数据类型的值或者其他bean的引用。
而自动装配也即是自动注入依赖是相比于用XML文件来手动注入的。用XML文件来手动输入,也即是用元素< constructor-arg>和< property>来装配,将会由具体的文章来详细的描述,这里不再赘述。
自动装配有什么好处
自动装配有助于减少甚至消除配置<property>
元素和<constructor-arg>
,减少XML的配置数量,当然不用写XML文件,我们自然要轻松地多。
如何使用自动装配
想要使用自动装配就必须要详细地了解自动装配。
自动装配类型
自动装配分成四种:
- byName
按照bean的属性名称来匹配要装配的bean
例如:Person类中的属性boot按照此规则则要装配id为boot的其他bean到boot属性中,就是新建一个id为boot的其他bean对象来赋值给Person类的boot属性。
Boot boot = new Boot();
Person person = new Person();
person.setBoot(boot);//根据属性的名称来匹配
- byType
按照bean的类型来匹配要装配的bean
例如:Person类的的属性类型为Boot,如果按照byType来进行自动装配,则会匹配Boot类的bean对象
Boot boot2 = new Boot();
Person person = new Person();
person.setBoot(boot2);//它根据类型来匹配,不根据名称来匹配
- constructor
按照bean的构造器入参的类型来进行匹配
例如:Person类有一个拥有一个入参的构造器,其入参的类型为Boot,所以它会装配类型为Boot的bean。
Boot boot2 = new Boot();
Person person = new Person(boot2);//它根据类型来匹配,不根据名称来匹配
- autodetect(自动探测)
先使用constructor进行装配,如果不成功就使用byType来装配
如何设置自动装配
单独配置
<bean id = "auto" class = "com.wang.AutoClass" autowire="byType" />
即是通过<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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd default-autowire ="byType">
如果每一个bean的自动装配的方式都相同,则可以设置默认配置,就不需要每一个bean元素都去配置。