## @Autowired
作用:用于对属性的bean进行注入。是通过类型注入的,即By Type。
使用:
1、如果注入的是接口类型,那么就需要注意,我们在使用的时候一定要指定bean的名字,因为防止以后这个接口会扩展出来新的子类,如果我们用到哪个子类,我们就要使用到对应的子类对象bean进行注入。
```java
public class MainTest {
@Autowired
@Qualified("men") // men是bean的名字
private Person men;
}
```
2、如果注入的是实现类,那么因为只有这一个类,所以不会产生冲突bean冲突问题,我们大可放心直接使用一个`@Autowired`注解即可。
## @Resource
作用:用于对属性的bean进行注入。区别于Autowired,该注解是通过bean名字注入的,即By Name。这个by name的名字是我要注入的bean的名字和我定义的变量名字相同,他就会自动注入这个bean。
```java
public class MainTest {
@Resource
private Person men; // 此时我们声明的变量名字是men,那么就会到spring容器中找一个名字是men的bean注入进来。
}
```
那我如果非要不写变量名是men呢,或者我就写个person,再或者我就想定义一个变量我把它叫做p,这样该怎么办呢。
这样也是可以的,因为我们的@Autowired注解要搭配@Qualified使用,此时就需要两个注解,而@Resource注解不需要,他只需要一个注解即可,然后在注解中指定bean的名字,写法如下
```java
public class MainTest {
@Resource(name = "men") // 在这里声明name属性即可
private Person p;
}
```
@Autowired和@Resource区别浅析