在大家学习spring中bean的注入的时候,相信大家对于这几个注解都不陌生,但是你真的了解他们吗?
首先简单区分下:
@Autowired : 通过类型注入(byType)
@Qualifier :通过名字注入 (byName)
@Resource :既可以通过类型也可以通过名字
其实在做bean操作的时候,@Autowired和@Resource并没有多大的区别,但是spring官方推荐使用@Autowired,为什么呢?因为@Autowired注解是spring带的,而@Res注解是引入javax包下面的
javax.annotation.Resource(懂的都懂)
通过类型注入和通过名字注入的区别
@Autowired注解如果找到多个bean这种情况,那么他可坑不知道找哪一个就会报错。
什么是多个bean呢:
简单来说(通与理解的)
一个接口里面有多个实现类,这时你要是通过@Autowired就会报错了。他找不到到底是哪一个
流程图如下:
这种多个bean你就要使用byName去注入,即在每个实现类给他一个初始化的名字比如:
@Service(name = “userService1”)
@Service(name = “userService2”)
如果这两个实现类实现的是同一个人类那么@Autowired注解显然就会报错,这时可以用@Qualifier注解即
@Qualifier(“userService2”)
这样就引入了第二个service
一般情况下
@Autowired和@Qualifier一起用,
@Autowired
@Qualifier(“userService2”)
private UserService userService;
@Resource单独用。
@Resource(name= “userService2”)
private UserService userService;
当存在一个bean的时候@Autowired单独使用
默认情况下@Resource注解,默认是通过byName去注入bean的
所以在这样的情况下做bean注入的时候
@Resource其实是=@Autowired+@Qualifier