Spring中@Autowired和@Resource的区别

蓝色妖姬 2024-03-09 ⋅ 25 阅读

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没有该属性。

全部评论: 0

    我有话说: