关于@Autowired和@Resource的区别
首先说一下共同点,两者都是用来注入依赖的注解,且都可以声明在字段和setter方法上。
下面说一下区别
@Autowired
@Autowired 是由Spring框架提供的,默认通过byType注入。
若有一个UserService和两个实现类UserServiceImpl1和UserServiceImpl21
2
3
4
5
public class UserServiceImpl1 implements UserService;
public class UserServiceImpl2 implements UserService;
通过@Autowired注入1
2
private UserService userService;
但显而易见,直接注入会报错。@Autowired默认通过byType注入,但是UserService有两个实现类,我们无法确定是哪一个,所以我们通过byNames注入。
但是byNames所需的变量名也无法匹配ioc容器中有的id,所以会报错。
解决方案
1 | //1.改变变量名 |
1 | //2.使用@Qualifier注解 |
@Resource
@Resource 是由J2EE提供的,默认通过byName注入。
若有一个UserService和两个实现类UserServiceImpl1和UserServiceImpl21
2
3
4
5
public class UserServiceImpl1 implements UserService;
public class UserServiceImpl2 implements UserService;
通过@Resource注入1
2
private UserService userService;
@Resource默认通过byName注入,但是UserService这个变量名无法和IOC容器中的任何一个id进行匹配,我们无法确定是哪一个,所以我们通过byType注入。
但是使用byType后发现UserService中的实现类有两个,无法确定用哪个,所以报错。
解决方案
1 | //1.指定name |






