@Autowired和@Resource 这两个注解的区别?

本文详细对比了Spring框架中的@Autowired注解与J2EE中的@Resource注解,阐述了两者在Bean装配上的默认行为差异,@Autowired按类型装配,而@Resource按名称装配。

1.  @Autowired属于Spring框架,默认按类型装配Bean。

2.  @Resource属于J2EE,默认按名称装配Bean。

在 Spring 框架中,`@Autowired` `@Resource` 是用于**依赖注入(Dependency Injection, DI)**的注解。它们与前面提到的 `@RequestParam`、`@PathVariable` 等注解不同,后者用于**请求参数绑定**,而 `@Autowired` `@Resource` 则是用于**容器管理对象之间的装配关系**。 --- ## ✅ 回答问题: ### 1. `@Autowired` - **来源**:Spring 框架提供的注解 - **作用**:按类型(byType)自动装配 Bean。 - **使用位置**:字段、构造器、方法(如 setter 方法) - **示例代码**: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public String getUserInfo() { return userRepository.findUserById(1L); } } ``` ### 2. `@Resource` - **来源**:Java 的标准注解(JSR-250),不是 Spring 特有的 - **作用**:默认按名称(byName)进行装配;如果找不到名称匹配的 Bean,则再按类型查找。 - **示例代码**: ```java import javax.annotation.Resource; @Service public class OrderService { @Resource(name = "orderRepository") private OrderRepository repository; public String getOrderDetails() { return repository.getOrderById(1001L); } } ``` --- ## ✅ 区别总结: | 特性 | `@Autowired` | `@Resource` | |-----------------------|--------------------------------------|----------------------------------------| | 来源 | Spring 自定义注解 | Java 标准注解(JSR-250) | | 默认装配方式 | 按类型(byType) | 按名称(byName) | | 是否支持名称指定 | 支持,需要配合 `@Qualifier` 使用 | 支持,通过 `name` 属性直接指定 | | 所属包 | `org.springframework.beans.factory.annotation` | `javax.annotation` | --- ## ✅ 示例对比: ```java // @Autowired 示例 @Autowired private UserService userService; // @Autowired + @Qualifier 示例 @Autowired @Qualifier("specificUserService") private UserService userService; // @Resource 示例 @Resource(name = "specificUserService") private UserService userService; ``` --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值