目录
1. 什么是自动装配
自动装配:也就是 Spring
会在容器中自动的查找,并自动的给 bean
装配及其关联的属性
涉及到自动装配 bean
的依赖关系时,Spring
有多种处理方式。Spring
提供了 4
种自动装配策略
public interface AutowireCapableBeanFactory extends BeanFactory {
// 无需自动装配
int AUTOWIRE_NO = 0;
// 按名称自动装配 bean 属性
int AUTOWIRE_BY_NAME = 1;
// 按类型自动装配 bean 属性
int AUTOWIRE_BY_TYPE = 2;
// 按构造器自动装配
int AUTOWIRE_CONSTRUCTOR = 3;
// 过时方法,Spring3.0 之后不再支持
@Deprecated
int AUTOWIRE_AUTODETECT = 4;
}
2. 什么是依赖注入
依赖注入:当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,创建被调用者的实例的工作由 IOC
容器来完成。然后注入调用者,称为依赖注入
控制反转:当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。然而采用控制反转的方式,创建被调用者的工作不再由调用者来完成,创建被调用者的实例的工作由 IOC
容器来完成。也就是把对象的创建,初始化,销毁的工作交给 spring ioc
容器来做。由 spring ioc
容器来管理对象的生命周期
依赖注入的方式有两种:构造器注入和 setter
方法注入
2.1. 依赖注入与自动装配的关系
依赖注入的本质就是装配,装配是依赖注入的具体行为
在传统的使用 xml
文件装配 bean
是一件很繁琐的事情,而且还需要找到对应类型的 bean
才能装配,一旦 bean
很多,就不好维护了。为了解决这种问题,spring
使用注解来进行自动装配。自动装配就是开发人员不必知道具体要装配哪个 bean
的引用,这个识别的工作会由 spring
来完成。与自动装配配合的还有“自动检测”,这个动作会自动识别哪些类需要被配置成 bean
,进而来进行装配
因此也可以这样理解:自动装配是为了将依赖注入“自动化”的一个简化配置的操作
3. Spring
中自动装配的策略
3.1. byName
它的意思是:把与 bean
的属性具有相同名字的其他 bean
自动装配到 bean
的对应属性中
例:在 User
的 bean
中有个属性 Role myRole
,再创建一个 Role
的 bean
,它的名字如果叫 myRole
,那么在 User
中就可以使用 byName
来自动装配
public class User{
private Role myRole;
}
public class Role {
private String id;
private String name;
}
上面是 bean
的定义,再看配置文件
<bean id="myRole" class="com.viewscenes.netsupervisor.entity.Role">
<property name="id" value="1001"></property>
<property name="name" value="管理员"></property>
</bean>
<bean id="user" class="com.viewscenes.netsupervisor.entity.User" autowire="byName"></bean>
如上所述,只要属性名称和 bean
的名称可以对应,那么在 user
的 bean
中就可以使用 byName
来自动装配。那么,如果属性名称对应不上呢?
3.2. byType
它的意思是:把与 bean
的属性具有相同类型的其他 bean
自动装配到 bean
的对应属性中
<bean class="com.viewscenes.netsupervisor.entity.Role">
<property name="id" value="1001"></property>
<property name="name" value="管理员">