大家好,我是AK,最近在整理Java相关技术知识体系化;本篇主要介绍@Resource 注解和 @Autowired的区别以及使用,适合学习spring框架小伙伴了解学习。
目录
- 一、@Resource与@Autowired的区别
- 二、@Resource详解
- 三、@Autowired详解
一、@Resource与@Autowired的区别
@Resource 注解和 @Autowired 注解都是在 Spring Framework 中进行依赖注入的注解,但它们之间有一些区别:
1. 来源不同:
@Resource 注解是由 Java EE 提供的注解,它定义在 javax.annotation.Resource 包下。
@Autowired 注解是由 Spring 提供的注解,它定义在 org.springframework.beans.factory.annotation.Autowired 包下。
2. 依赖注入策略不同:
@Resource 注解默认按照名称进行依赖注入,如果有多个具有相同类型的依赖,可以使用 name 属性指定依赖的名称。
@Autowired 注解默认按照类型进行依赖注入,如果有多个具有相同类型的依赖,可以使用 @Qualifier 注解或者 @Primary 注解指定依赖的名称或主要依赖。
3. 兼容性不同:
@Resource 注解属于 Java EE 标准的注解,在 Java EE 环境中可以正常使用。
@Autowired 注解是 Spring Framework 提供的特定于 Spring 的注解,它可以在 Spring 环境下使用。
4. 注解属性不同:
@Resource 注解可以添加 name 属性来指定依赖的名称,还可以添加 mappedName 属性来指定依赖的 JNDI 名称。
@Autowired 注解可以添加 required 属性来指定依赖是否必须,默认为 true。
综上所述,@Resource 注解和 @Autowired 注解在功能上有一些相似之处,但也有一些区别。如果你在 Java EE 环境中使用依赖注入,可以选择使用 @Resource 注解;如果在 Spring Framework 环境中使用依赖注入,可以选择使用 @Autowired 注解。需要根据具体的情况选择适合的注解进行依赖注入。
二、@Resource详解
@Resource 是 Java EE 的注解之一,它用于进行依赖注入。@Resource 注解可以应用于字段、方法、参数或者类上。
在 Spring Framework 中,@Resource 注解是由 Spring 提供的用于进行依赖注入的注解之一。当我们在类中使用 @Resource 注解时,Spring 会自动将匹配的依赖注入到目标字段或方法中。
@Resource 的使用方式有以下几种:
注解应用在字段上:
@Resource
private SomeDependency someDependency;
注解应用在 setter 方法上:
private SomeDependency someDependency;
@Resource
public void setSomeDependency(SomeDependency someDependency) {
this.someDependency = someDependency;
}
注解应用在构造函数上:
private SomeDependency someDependency;
@Resource
public MyService(SomeDependency someDependency) {
this.someDependency = someDependency;
}
注解应用在方法的参数上:
private SomeDependency someDependency;
@Resource
public void someMethod(@Resource SomeDependency someDependency) {
this.someDependency = someDependency;
}
需要注意的是,@Resource 注解默认按照名称进行匹配依赖注入。如果有多个具有相同类型的依赖,可以使用 name 属性指定依赖的名称。
@Resource(name = "someDependency2")
private SomeDependency someDependency;
此外,@Resource 注解还可以添加 mappedName 属性来指定依赖的 JNDI 名称。
总结来说,@Resource 注解是用于进行依赖注入的注解,它可以应用于字段、方法、参数或者类上。默认按照名称进行依赖匹配,也可以通过 name 属性或者 mappedName 属性指定依赖的名称。在 Spring Framework 中,@Resource 注解与 @Autowired 注解类似,但略有区别。
三、@Autowired详解
@Autowired 是 Spring Framework 中用于进行依赖注入的注解之一。它可以用于自动装配依赖关系,使得在需要使用某个依赖时,Spring 可以自动将合适的实例注入到目标对象中。
@Autowired 注解可以应用于字段、构造函数、setter 方法和方法的参数上。
使用 @Autowired 注解时,Spring 会根据类型进行依赖匹配,它会尝试找到与目标类型匹配的依赖,并将其注入到目标对象中。如果存在多个匹配的依赖时,可以使用 @Qualifier 注解来指定具体注入哪个实例。
下面是 @Autowired 注解的几种用法:
注解应用在字段上:
@Autowired
private SomeDependency someDependency;
注解应用在构造函数上:
private SomeDependency someDependency;
@Autowired
public MyService(SomeDependency someDependency) {
this.someDependency = someDependency;
}
注解应用在 setter 方法上:
private SomeDependency someDependency;
@Autowired
public void setSomeDependency(SomeDependency someDependency) {
this.someDependency = someDependency;
}
注解应用在方法的参数上:
private SomeDependency someDependency;
@Autowired
public void someMethod(SomeDependency someDependency) {
this.someDependency = someDependency;
}
需要注意的是,默认情况下,@Autowired 注解要求依赖必须存在,即依赖对象不能为空。如果想要指定依赖为非必需,可以设置 required 属性为 false。
@Autowired(required = false)
private SomeDependency someDependency;
此外,@Autowired 注解还可以与 @Qualifier 注解一起使用,从而精确指定要注入的依赖实例。
总结来说,@Autowired 注解是 Spring Framework 中用于进行依赖注入的注解,它可以应用于字段、构造函数、setter 方法和方法的参数上。它根据类型进行依赖匹配,默认要求依赖必须存在,可以使用 @Qualifier 注解指定具体注入哪个实例,也可以设置 required 属性为 false 来声明依赖为非必需。使用 @Autowired 可以简化代码,减少手动注入的工作量。
---- 永不磨灭的番号:我是AK