写点什么

Spring 注解 @Resource 与 @Autowired 的区别

  • 2022 年 9 月 26 日
    北京
  • 本文字数:673 字

    阅读完需:约 2 分钟

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 无法注入,因为不知道注入哪个实体类,如图


发布于: 刚刚阅读数: 3
用户头像

让技术不再枯燥,让每一位技术人爱上技术 2022.07.22 加入

还未添加个人简介

评论

发布
暂无评论
Spring 注解 @Resource 与 @Autowired 的区别_注解_六月的雨在InfoQ_InfoQ写作社区