Spring中的@Autowired自动装配

本文详细介绍了Spring框架中的@Autowired自动装配,包括自动装配的概念、依赖注入与自动装配的关系,以及不同自动装配策略,如byName、byType、constructor等。此外,还探讨了注解的使用,如@Qualifier、@Primary等,以及如何通过注解来控制装配策略。
摘要由CSDN通过智能技术生成

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 的对应属性中

例:在 Userbean 中有个属性 Role myRole,再创建一个 Rolebean,它的名字如果叫 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 的名称可以对应,那么在 userbean 中就可以使用 byName 来自动装配。那么,如果属性名称对应不上呢?

3.2. byType

它的意思是:把与 bean 的属性具有相同类型的其他 bean 自动装配到 bean 的对应属性中

<bean class="com.viewscenes.netsupervisor.entity.Role">
    <property name="id" value="1001"></property>
    <property name="name" value="管理员">
  • 9
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值