@Resource 真的是 byName 吗?

`@Resource`和`@Autowired`都可用于装配 Bean,但它们存在一些区别,具体如下: 1. **来源不同**:`@Autowired`来自 Spring 框架,是 Spring 特定的;而`@Resource`来自 Java 的 JSR - 250 规范,是 Java 标准的[^1]。 2. **自动装配方式默认值不同**:`@Autowired`默认按 byType 自动装配,若要使用 byName,需要和`@Qualifier`一起配合;`@Resource`默认 byName 自动装配,若指定了 name,则用 byName 自动装配,若指定了 type,则用 byType 自动装配[^2]。 3. **支持参数不同**:`@Autowired`只包含一个参数`required`,表示是否开启自动准入,默认是`true`;`@Resource`包含七个参数,其中最重要的两个参数是`name`和`type`[^2]。 4. **使用位置不同**:`@Autowired`能够用在构造器、方法、参数、成员变量和注解上;`@Resource`能用在类、成员变量和方法上[^2]。 5. **装配顺序不同**:二者的装配顺序存在差异,但引用未详细说明具体的装配顺序情况[^2]。 6. **对 Constructor 注入的支持不同**:引用未详细说明二者在 Constructor 注入支持方面的具体差异情况,但提及了存在此方面区别[^3]。 以下是使用`@Autowired`和`@Resource`的代码示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import javax.annotation.Resource; // 定义一个接口 interface UserDao { void save(); } // 实现类 class UserDaoImpl implements UserDao { @Override public void save() { System.out.println("Save user data."); } } // 使用 @Autowired 进行注入 class TestServiceImplWithAutowired { @Autowired @Qualifier("userDaoImpl") private UserDao userDao; public void test() { userDao.save(); } } // 使用 @Resource 进行注入 class TestServiceImplWithResource { @Resource(name = "userDaoImpl") private UserDao userDao; public void test() { userDao.save(); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值