首先这@Resource @Autowired这两个注解都是Spring生态里去实现Bean的依赖注入(在springmvc项目和springboot项目中都可以使用)
下面我在说一下这个注解的区别
@Autowired
@Autowired是Spring里面提供的一个注解,它默认是根据类型来实现Bean的依赖注入;
@Autowired里面有一个required属性,默认值是true 表示强制要求bean实例的一个注入,在应用启动的时候,如果IOC容器中不存在对应类型的bean,那么启动就会报错;如果我们不希望实现依赖注入就可以把这个属性设置为false
其次如果Spring IOC容器中存在多个相同类型的bean实例,但是由于@Autowired是根据类型去进行注入的,所以Spring启动的时候就会提示一个错误,就是原本只能注入一个单实例Bean,但是现在Ioc容器存在多个,导致注入失败;针对这个问题,可以使用@Primary @Qualifier这两个注解来解决;
@Primary表示主要的Bean,当存在多个相同类型的Bean的时候,会优先使用声明了@Primary注解的一个Bean
@Qualifier 相当于条件筛选,可以根据Bean的名字可以去找到需要装配的目标Bean
@Resource
接下来我再解释一下@Resource这个注解,@Resource是JDK中提供的一个注解,只不过Spring在实现上提供了这个注解的一个功能支持,它的使用方式和@Autowired类似,
最大的区别就是@Resource可以支持ByName 和 ByType两种注入方式;
如果使用name属性,spring会根据bean的名字来进行依赖注入;
如果使用type属性,spring会根据bean的类型来进行依赖注入,如果两个属性都没有进行设置,@Resource默认是根据定义的属性名字去容器中进行匹配,如果没有匹配成功,再根据类型来匹配;
如果两个都没有匹配到就会报错