@Resource 和 @Autowired
2020-11-22 本文已影响0人
轻轻敲醒沉睡的心灵
1. 用途
@Resource和@Autowired注解都是用来实现依赖注入的,可以对成员变量(两者如果都写在字段上,那么就不需要再写setter方法)、方法和构造函数进行标注,来完成自动装配的工作,实现bean的注入
2. 不同点
- 来源不同
- @Autowired是由Spring提供,类名为
org.springframework.beans.factory.annotation.Autowired
- @Resource是由J2EE提供,类名为
javax.annotation.Resource
- 注入方式
- @AutoWried按by type自动注入,当接口的实现类有多个时,可以使用@Qualifier("className")注解,指定要注入的实现类
public class UserServiceImpl implements UserService {
@Autowired // 从spring容器中获取返回类型为UserDao的实现类(默认byType获取),注入到该属性中,
@Qualifier("userDaoTest") // 指定注入bean的名称
private UserDao userDao;
}
- @Resource默认按 byName自动注入,但是@Resource还提供了name和type 2个属性,可以自定义自己想要的。
- 若不指定属性,默认按byName匹配注入;若按byName找不到,则继续自动按byType来找
- 若指定了name属性,则按byName匹配注入,找不到则抛出异常
- 若指定了type属性,则按byType匹配注入,找不到则抛出异常
- 若同时指定了name和type,傻逼才这么写
public class UserServiceImpl implements UserService { @Resource //@Resource(name="userDaoTest") // 从spring容器中获取名称为UserDaoTest的实现类匹配 //@Resource(type=UserDaoTest.class) private UserDao userDao; }