@Autowired 和 @Resource 都是用于依赖注入(Dependency Injection)的注解,
区别如下:
1、来源不同:
@Autowired 是Spring框架的注解,用于自动装配bean。
@Resource 是Java EE(Java Platform, Enterprise Edition)规范的一部分,提供了一种在Java EE环境中进行依赖注入的方式。在Java SE环境中也可以使用,但需要引入相应的依赖。
2、注入方式不同:
@Autowired 可以用在字段、构造方法和方法上,通过类型匹配进行注入。如果有多个匹配的bean,可以使用@Qualifier注解指定具体的bean。
@Resource 主要是通过按照名称进行注入,可以指定name属性来指定bean的名称。如果没有指定name属性,它会按照默认的规则(先按照名称查找,再按照类型查找)来选择注入的bean。
3、兼容性不一样:
@Autowired 是Spring特有的注解,因此在非Spring环境中无法使用。
@Resource 是Java EE规范的一部分,因此在Java EE环境中可以使用,同时也可以在Spring中使用。
4、可选性上有些区别:
@Autowired 注解的required属性默认为true,表示被注入的bean必须存在,否则会抛出异常。可以通过设置required = false来使注入变为可选。
@Resource 注解的required属性默认为true,表示被注入的bean必须存在,可以通过设置required = false来使注入变为可选。
示例:
// 使用@Autowired注解
@Component
public class MyComponent {@Autowiredprivate MyService myService;// constructor, methods
}// 使用@Resource注解
@Component
public class MyComponent {@Resource(name = "myService")private MyService myService;// constructor, methods
}
总结:
@Autowired 是Spring提供的一种依赖注入方式,而@Resource 是Java EE规范提供的方式,它们在使用上有一些细微的差别。在Spring应用中,通常使用@Autowired 更为常见。