当前位置: 首页 > news >正文

精品课程网站怎么做江苏网站推广网络

精品课程网站怎么做,江苏网站推广网络,零基础学软件开发难吗,wordpress二次元主页Autowired 和 Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解。它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见的面试题之一,所以我们今天就来盘它。 Autowired 和 Resource 的…

@Autowired 和 @Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解。它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见的面试题之一,所以我们今天就来盘它。 @Autowired 和 @Resource 的区别主要体现在以下 5 点:

来源不同;

  1. 依赖查找的顺序不同;

  1. 支持的参数不同;

  1. 依赖注入的用法不同;

  1. 编译器 IDEA 的提示不同。

1.来源不同

@Autowired 和 @Resource 来自不同的“父类”,其中 @Autowired 是 Spring 定义的注解,而 @Resource 是 Java 定义的注解,它来自于 JSR-250(Java 250 规范提案)。

小知识:JSR 是 Java Specification Requests 的缩写,意思是“Java 规范提案”。任何人都可以提交 JSR 给 Java 官方,但只有最终确定的 JSR,才会以 JSR-XXX 的格式发布,如 JSR-250,而被发布的 JSR 就可以看作是 Java 语言的规范或标准。

2.依赖查找顺序不同

依赖注入的功能,是通过先在 Spring IoC 容器中查找对象,再将对象注入引入到当前类中。而查找有分为两种实现:按名称(byName)查找或按类型(byType)查找,其中 @Autowired 和 @Resource 都是既使用了名称查找又使用了类型查找,但二者进行查找的顺序却截然相反。

2.1 @Autowired 查找顺序

@Autowired 是先根据类型(byType)查找,如果存在多个 Bean 再根据名称(byName)进行查找,它的具体查找流程如下:

关于以上流程,可以通过查看 Spring 源码中的 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor#postProcessPropertyValues 实现分析得出,源码执行流程如下图所示:

2.2 @Resource 查找顺序

@Resource 是先根据名称查找,如果(根据名称)查找不到,再根据类型进行查找,它的具体流程如下图所示:

关于以上流程可以在 Spring 源码的 org.springframework.context.annotation.CommonAnnotationBeanPostProcessor#postProcessPropertyValues 中分析得出。虽然 @Resource 是 JSR-250 定义的,但是由 Spring 提供了具体实现,它的源码实现如下:

2.3 查找顺序小结

由上面的分析可以得出:

  • @Autowired 先根据类型(byType)查找,如果存在多个(Bean)再根据名称(byName)进行查找;

  • @Resource 先根据名称(byName)查找,如果(根据名称)查找不到,再根据类型(byType)进行查找。

3.支持的参数不同

@Autowired 和 @Resource 在使用时都可以设置参数,比如给 @Resource 注解设置 name 和 type 参数,实现代码如下:

@Resource(name = "userinfo", type = UserInfo.class)
private UserInfo user;

但二者支持的参数以及参数的个数完全不同,其中 @Autowired 只支持设置一个 required 的参数,而 @Resource 支持 7 个参数,支持的参数如下图所示:

4.依赖注入的支持不同

@Autowired 和 @Resource 支持依赖注入的用法不同,常见依赖注入有以下 3 种实现:

  1. 属性注入

  1. 构造方法注入

  1. Setter 注入

这 3 种实现注入的实现代码如下。

a) 属性注入

复制代码

@RestController
public class UserController {// 属性注入@Autowiredprivate UserService userService;@RequestMapping("/add")public UserInfo add(String username, String password) {return userService.add(username, password);}
}

b) 构造方法注入

@RestController
public class UserController {// 构造方法注入private UserService userService;@Autowiredpublic UserController(UserService userService) {this.userService = userService;}@RequestMapping("/add")public UserInfo add(String username, String password) {return userService.add(username, password);}
}

c) Setter 注入

@RestController
public class UserController {// Setter 注入private UserService userService;@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}@RequestMapping("/add")public UserInfo add(String username, String password) {return userService.add(username, password);}
}

其中, @Autowired 支持属性注入、构造方法注入和 Setter 注入,而 @Resource 只支持属性注入和 Setter 注入,当使用 @Resource 实现构造方法注入时就会提示以下错误:

5.编译器提示不同

当使用 IDEA 专业版在编写依赖注入的代码时,如果注入的是 Mapper 对象,那么使用 @Autowired 编译器会提示报错信息,报错内容如下图所示:

虽然 IDEA 会出现报错信息,但程序是可以正常执行的。 然后,我们再将依赖注入的注解更改为 @Resource 就不会出现报错信息了,具体实现如下:

总结

@Autowired 和 @Resource 都是用来实现依赖注入的注解(在 Spring/Spring Boot 项目中),但二者却有着 5 点不同:

  1. 来源不同:@Autowired 来自 Spring 框架,而 @Resource 来自于(Java)JSR-250;

  1. 依赖查找的顺序不同:@Autowired 先根据类型再根据名称查询,而 @Resource 先根据名称再根据类型查询;

  1. 支持的参数不同:@Autowired 只支持设置 1 个参数,而 @Resource 支持设置 7 个参数;

  1. 依赖注入的用法支持不同:@Autowired 既支持构造方法注入,又支持属性注入和 Setter 注入,而 @Resource 只支持属性注入和 Setter 注入;

  1. 编译器 IDEA 的提示不同:当注入 Mapper 对象时,使用 @Autowired 注解编译器会提示错误,而使用 @Resource 注解则不会提示错误。

文章转载地址:https://blog.csdn.net/xhbzl/article/details/126765893

http://www.yayakq.cn/news/563342/

相关文章:

  • 网站后台m贸易网站建设公司
  • 网站标题采集建立网站需要哪些东西
  • 模板网站怎么用建设集团网站方案
  • 学做衣服网站房屋室内设计用什么软件
  • 觉 网站做图软件ps下载网站有哪些内容
  • 优质企业网站建设网站 设计 文档
  • 网站备案号不存在哪些公司经常做网站
  • 推荐一些做电子的网站网站建设 服务器主机配置
  • 做响应式网站的百度seo营销推广
  • pc网站和手机网站纯净软件网站推荐
  • 给女朋友做网站的素材网站主页被做跳转
  • 移动网站建设书籍推荐铜川做网站的公司
  • 网站网店建设企业网站模板免费下载
  • 网站建设中英文版wordpress是php文件路径
  • 南京建设企业网站的公司英文网站建设600
  • 杭州网站设计上市公司郑州seo推广优化
  • 什么行业需要做网站和推广阅读网站模板下载
  • 做简历网站微信公众号网站怎么做
  • 企业网站优化方案范本在线网站建设建议
  • 中国沈阳网站在哪里下载jsp 淘宝网站验证码 设计
  • php 家政网站创一东莞网站建设
  • 购物网站开发代码新站加快网站收录
  • 权威的大连网站建设品牌推广方案100例
  • 哪个网站查食品建设好网站建设与开发英文文献
  • 网站访问统计怎么做用asp做网站怎么美观
  • 建设医院网站多少钱响应式网站一般做几个尺寸
  • 展示网站和营销网站的区别sem营销推广
  • 做美食的网站有那一些如皋网站建设
  • 各地网站备案杨浦网站建设公司
  • 手机建站程序源码电子商务网站建设论文