1、前言

在使用spring开发过程中,我们基本上都是使用@Autowired这个注解,用来注入已有的bean。但是有些时候,会注入失败。当我们加上参数(required=false)就能解决。今天整理一个我在实际开发中的例子

2、required属性

@Autowired(required=true):当使用@Autowired注解的时候,其实默认就是@Autowired(required=true),表示注入的时候,该bean必须存在,否则就会注入失败。

@Autowired(required=false):表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。
3、使用

我们的正常使用会在Controller层注入service,在service中注入mapper。

但是如果有一个公用方法,需要注入某个元素,并且这个方法在公用模块里。当该模块被引入其他项目中,该项目中并需要注入所需的bean时,就出现如图【2】的类似错误。那么问题来了,我们项目中并不需要该要注入的类,使得整个项目报错。

4、原因分析及解决

在容器的启动过程中,会初始化很多bean,这也是spring的核心之一(IOC)。但是在注入的过程中,扫描到公共方法中要注入的bean,并未找到,强行注入就会注入失败。我们又不能单独的去除改方法,所以我们采取的思想就是有bean就注入,没有就不注入。解决办法就是@Autowired(required=false)。

5、容器的父子关系

通过日志如图:

通过日志我们可以看到,容器的启动顺序。

先加载父容器(spring),后加载子容器(springmvc)。所以在Controller里面注入service时,父容器中的bean已经初始化完毕,所以正常注入。
在父子容器中,父容器元素对子容器可见,子容器对父容器的元素不可见。所以父容器中不能获取子容器的元素,但是子容器可以获取父容器的元素。
当前容器均可获取当前容器中的元素,也就是说在service中可以注入其他service。
但是,当前容器不可以注入自己。这样就会不停的注入自己,陷入死循环。从而找不到要注入的bean。如图:

@Autowired(required=true)相关推荐

  1. spring Autowired(required = false) 说明

    当候选 Bean 数目不为 1 时的应对方法    在默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Be ...

  2. Error while importing Swagger 2.0: (Patchable) path parameters must be required:true

    swagger导入postman异常 Error while importing Swagger 2.0: (Patchable) path parameters must be required:t ...

  3. SSM始用 @Autowired(required = false)的一个坑

    今天在写东西时候,一个小问题卡了好久,,,我就是要引入两个dao层接口判断,然而一直报500空指针异常,,另一个服务一直找不到,苦恼了很久.才发现原来是注解始用的问题..貌似是一个@Autowired ...

  4. 问题清空easyui required=true的提示信息所在位置不对。乱跑的解决办法

    废话就不多说了,开始... 问题:像这样: 这个window打开的时候.这个form面里的验证息信居然示显到别的地方啦.而且 每日一道理 翻开早已发黄的页张,试着寻找过去所留下的点点滴滴的足迹.多年前 ...

  5. 解决Django文件表单验证forms.FileField(required=True),总是无法通过验证:这个字段是必填项

    解决方法 如果在实例化form时是如下代码: save_file_form = SaveFileForm(request.POST) 则需要改为: save_file_form = SaveFileF ...

  6. Spring5:@Autowired注解、@Resource注解和@Service注解

    转载:http://www.cnblogs.com/xrq730/p/5313412.html 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有 ...

  7. @Autowired与@Resource的区别

    一.@Autowired @Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如 ...

  8. java was datasource_使用Spring Boot配置Druid时dataSource无法被autowired

    配置好了dataSource之后,想测试一下有没有配置成功 package com.yang.Controller; import com.alibaba.druid.pool.DruidDataSo ...

  9. spring autowired idea都匹配上了_你清楚这几个Spring常用注解吗?

    作者:平凡希http://cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 如 ...

最新文章

  1. JAVA设计模式之不变模式
  2. 问题1-2:能否说:“电路交换和面向连接是等同的,而分组交换和无连接是等同的”? 答:不行。这在概念上是很不一样的。这点可举例说明如下。...
  3. html中英文混排,EndNote中英文混排时et al和等的3种解决方法 | 科研动力
  4. JS中怎样获取当前年以及前后几年并构造成对象数组
  5. 她不理我了,怎么办?
  6. 诺顿本月将发布儿童网络安全软件
  7. Nginx反向代理及负载均衡
  8. GEO2R/GEOquery的结果可能是错的!!!
  9. DBUtils 主要结果集说明
  10. Python算术运算符目录
  11. PHP的分页原理和简单实例
  12. IT人母亲的美国之行(8)
  13. hdu Hike on a Graph
  14. 深入理解JavaScript系列(31):设计模式之代理模式
  15. 2019Deecamp面试经验分享
  16. Android常见面试题字节跳动、阿里、腾讯2019实习生Android岗部分面试题
  17. android 自定义数字键盘
  18. Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传
  19. linux相关命令------文件内容显示以及文件其他命令
  20. SAP---安装方法

热门文章

  1. 研究性学习:APP的隐私问题
  2. IT行业里的热门技术和项目分享
  3. Qt | QTableView的使用方法
  4. Response.Flush()的作用
  5. sql 服务器停止运行,3.1.1 启动、停止、暂停和重新启动SQL Server服务
  6. 交通流预测爬坑记(二):最简单的LSTM预测交通流,使用tensorflow2实现
  7. 360浏览器 | 如何从360浏览器中恢复你的密码
  8. 研发新人如何快速熟悉新项目和业务
  9. 我TM究竟应该选哪个版本的MySQL?!
  10. 三种开窗函数详细用法,图文详解