1. 简介
在Spring中,@Autowired和@Resource都是用来实现依赖注入的注解。它们能够自动装配bean,减少了手动编写配置文件的工作量,并提升了代码的可读性和维护性。然而,@Autowired和@Resource在一些方面有一些细微的差别。
2. @Autowired
@Autowired是Spring的核心注解之一,它可以用来自动装配bean,将一个bean注入到另一个bean中。
2.1 默认按类型注入
当@Autowired注解用在字段、构造方法或者setter方法上时,Spring会按照类型自动搜索匹配的bean进行注入。如果找到多个匹配的bean,则会抛出异常。
示例代码:
@Autowired
private UserService userService;
2.2 通过名称注入
@Autowired注解还可以通过指定bean的名称进行注入,即使用@Qualifier注解。
示例代码:
@Autowired
@Qualifier("userServiceImpl")
private UserService userService;
2.3 required属性
@Autowired注解的required属性默认为true,表示注入的bean必须存在。如果设置为false,则可以允许注入的bean不存在。
示例代码:
@Autowired(required = false)
private UserService userService;
3. @Resource
@Resource是J2EE提供的注解之一,也可用于实现依赖注入。
3.1 默认按名称注入
当@Resource注解用在字段、构造方法或者setter方法上时,Spring会按照名称自动搜索匹配的bean进行注入。如果找不到匹配的bean,则会抛出异常。
示例代码:
@Resource
private UserService userService;
3.2 通过名称和类型注入
@Resource注解还可以通过同时指定bean的名称和类型进行注入。
示例代码:
@Resource(name = "userServiceImpl", type = UserService.class)
private UserService userService;
3.3 name属性和type属性
@Resource注解的name属性用来指定bean的名称,type属性用来指定bean的类型。
示例代码:
@Resource(name = "userServiceImpl")
private UserService userService;
@Resource(type = UserService.class)
private UserService userService;
4. 总结
- @Autowired是由Spring提供的注解,而@Resource是J2EE提供的注解。
- @Autowired默认按类型自动注入,@Resource默认按名称自动注入。
- @Autowired可以使用@Qualifier指定bean名称,@Resource可以同时指定名称和类型。
- @Autowired的required属性默认为true,表示注入的bean必须存在,@Resource没有该属性。
本文来自极简博客,作者:蓝色妖姬,转载请注明原文链接:Spring中@Autowired和@Resource的区别