Spring - 属性注入之注解(@Autowired、@Qualifier、@Resource)

简介: Spring - 属性注入之注解(@Autowired、@Qualifier、@Resource)

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。


image.pngimage.png1、共同点

两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

2、不同点

(1)@Autowired

@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired; 只按照byType注入。

publicclassTestServiceImpl {
// 下面两种@Autowired只要使用一种即可@AutowiredprivateUserDaouserDao; // 用于字段上@AutowiredpublicvoidsetUserDao(UserDaouserDao) { // 用于属性的方法上this.userDao=userDao;
    }
}

@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:

publicclassTestServiceImpl {
@Autowired@Qualifier("userDao")
privateUserDaouserDao; 
}

(2)@Resource

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

publicclassTestServiceImpl {
// 下面两种@Resource只要使用一种即可@Resource(name="userDao")
privateUserDaouserDao; // 用于字段上@Resource(name="userDao")
publicvoidsetUserDao(UserDaouserDao) { // 用于属性的setter方法上this.userDao=userDao;
    }
}

注:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。

@Resource装配顺序:

①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。


Ps:@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。


目录
相关文章
|
4天前
|
Java 开发者 Spring
深入理解Spring Boot的@ComponentScan注解
【4月更文挑战第22天】在构建 Spring Boot 应用时,@ComponentScan 是一个不可或缺的工具,它使得组件发现变得自动化和高效。这篇博客将详细介绍 @ComponentScan 的基本概念、关键属性及其在实际开发中的应用。
21 4
|
6天前
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
29 6
|
13天前
|
XML Java 数据格式
进阶注解探秘:深入Spring高级注解的精髓与实际运用
进阶注解探秘:深入Spring高级注解的精髓与实际运用
26 2
|
13天前
|
XML Java 数据格式
从入门到精通:Spring基础注解的全面解析
从入门到精通:Spring基础注解的全面解析
30 2
从入门到精通:Spring基础注解的全面解析
|
XML 前端开发 Java
【Spring基础系列3】Spring常用的注解
前两篇文章分别讲解了Sping IOC的基础知识,以及Spring通过注解装配Bean的常用方式,包括@Component、@Repository、@Service、@Controller、@Autowired、@Resource和@Qualifier,这篇文章主要对剩余高频的注解进行讲解。
161 0
【Spring基础系列3】Spring常用的注解
|
XML 前端开发 Java
Spring最常用的36个注解,哪些你还不知道?
随着技术的更新迭代,Java5.0开始支持注解。而作为java中的领军框架spring,自从更新了2.5版本之后也开始慢慢舍弃xml配置,更多使用注解来控制spring框架。 而spring的的注解那么多,可能做java很多年,都用不上。这里按照类型总结了这7种最常用的注解。 一. 核心注解 @Require 此注解用于bean的setter方法上。表示此属性是必须的,必须在配置阶段注入,否则会抛出BeanInitializationExcepion。 @Autowired 此注解用于bean的field、setter方法以及构造方法上,显式地声明依赖。根据type来autowiring。
104 0
Spring最常用的36个注解,哪些你还不知道?
|
XML 前端开发 Java
Spring最常用的36个注解,哪些你还不知道?
36个Spring最常用的7大类注解总结
Spring最常用的36个注解,哪些你还不知道?
|
Java Spring
一张图带你了解——Spring常用注解
spring常用注解 (1).png 参考官网:https://springframework.guru/spring-framework-annotations/
1354 0
|
Java 容器 Spring
Spring常用注解
FastJson时间格式化: @JSONField(format = “yyyy-MM-dd hh:mm:ss”) 单元测试加载Spring配置: @RunWith(SpringJUnit4ClassRunner.
1354 0
|
XML Java 数据格式
spring常用注解
http://blog.csdn.net/chjttony/article/details/6286144 http://blog.
725 0