前言:说好的每天一个注解,但是博主是开发游戏的,临近过年了,新年活动杂七杂八的事情一大堆,就耽搁了一阵子时间,现在才有空抽点时间出来继续写文章。
今天说的是两个注入bean的注解,在以前的时候我也一直都有疑问,同样是注入,这两者有什么区别和不同,查了一些资料,在此记录一下。
1.共同点
共同点就不多说了,就是注入bean,常用的就是注入Service和Mapper,今天的重点就是他们用户的差异。
2.不同点
(1)
- @Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。
- @Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
(2)
- @Autowired是Spring提供的
- @Resource是由jdk提供的
注:最好是将@Resource放在get,set方法上,这样更符合面向对象的思想。
当然,如果出现两个相同的实现类,那么我们在注入bean的时候就要用@Qualifier或者@Primary来声明。
@Qualifier:取名字,注入的时候根据名字注入,详情可看我以前的文章。
@Primary:重要的,如果有多个实现类,标明哪个类是优先注入的。
总体来说,这两个注解一般情况下都能实现bean的注入,只是在特殊情况下才有略微的差别,根据情况来使用。