Spring 注解 @Resource 与 @Autowired 的区别
@Resource 与 @Autowired
这两个注解的基本功能都是通过注解实现依赖注入 ,只不过 @Autowired 是 Spring 定义的,而 @Resource 是 JSR-250 定义的,大致功能基本相同。
比如 @Autowired 使用时
@Resource 使用时
当然,这里的 @Resource 在使用时也可以不用指定 name,这里指定 name 是由于当前接口有两个实现类,故而需要指明在此处注入的是哪一个实现类,这里我们来说一下 @Resource 与 @Autowired 区别
@Resource 与 @Autowired 区别
依赖识别方式 :@Autowired 默认是 byType 可以使用 @Qualifier 指定 Name,@Resource 默认 ByName 如果找不到则 ByType;
适用对象 :@Autowired 可以对构造器、方法、参数、字段使用,@Resource 只能对方法、字段使用;
提供方 :@Autowired 是 Spring 提供的,@Resource 是 JSR-250 提供的;
那么换句话说也就是这样理解
@Autowired:表示按照类型进行自动注入,缺点:如果类型相同,则无法注入;@Autowired 是根据类型进行自动装配的。如果当 Spring 上下文中一个接口存在不止一个实现类时启动会报错
@Resource:具备按照类型自动注入的特点,而后如果现在类型相同,则可以设置一个名称也就是说你使用 @Component、@Service 等注解设置自动扫描的时候可以设置一个名字,而这个名字就可以在 @Resource 中使用了,当然如果没有手动设置名字的话,模式是类名首字母小写,就是类的 name。
注意
SpringBoot 里面,因为其自动支持一些环境配置,所以如果使用的是 @Autowired 那么如果配置了多个相同类型的 Bean 的话,那么将无法进行准确的注入操作,那么必须使用 @Resource 完成。就比如上图中 @Resource 的使用,这里使用 @Autowired 无法注入,因为不知道注入哪个实体类,如图
版权声明: 本文为 InfoQ 作者【六月的雨在InfoQ】的原创文章。
原文链接:【http://xie.infoq.cn/article/9be21e7b0f59644bcf3de57b3】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论