@Autowired(required=true)
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)相关推荐
- spring Autowired(required = false) 说明
当候选 Bean 数目不为 1 时的应对方法 在默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Be ...
- 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 ...
- SSM始用 @Autowired(required = false)的一个坑
今天在写东西时候,一个小问题卡了好久,,,我就是要引入两个dao层接口判断,然而一直报500空指针异常,,另一个服务一直找不到,苦恼了很久.才发现原来是注解始用的问题..貌似是一个@Autowired ...
- 问题清空easyui required=true的提示信息所在位置不对。乱跑的解决办法
废话就不多说了,开始... 问题:像这样: 这个window打开的时候.这个form面里的验证息信居然示显到别的地方啦.而且 每日一道理 翻开早已发黄的页张,试着寻找过去所留下的点点滴滴的足迹.多年前 ...
- 解决Django文件表单验证forms.FileField(required=True),总是无法通过验证:这个字段是必填项
解决方法 如果在实例化form时是如下代码: save_file_form = SaveFileForm(request.POST) 则需要改为: save_file_form = SaveFileF ...
- Spring5:@Autowired注解、@Resource注解和@Service注解
转载:http://www.cnblogs.com/xrq730/p/5313412.html 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有 ...
- @Autowired与@Resource的区别
一.@Autowired @Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如 ...
- java was datasource_使用Spring Boot配置Druid时dataSource无法被autowired
配置好了dataSource之后,想测试一下有没有配置成功 package com.yang.Controller; import com.alibaba.druid.pool.DruidDataSo ...
- spring autowired idea都匹配上了_你清楚这几个Spring常用注解吗?
作者:平凡希http://cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 如 ...
最新文章
- JAVA设计模式之不变模式
- 问题1-2:能否说:“电路交换和面向连接是等同的,而分组交换和无连接是等同的”? 答:不行。这在概念上是很不一样的。这点可举例说明如下。...
- html中英文混排,EndNote中英文混排时et al和等的3种解决方法 | 科研动力
- JS中怎样获取当前年以及前后几年并构造成对象数组
- 她不理我了,怎么办?
- 诺顿本月将发布儿童网络安全软件
- Nginx反向代理及负载均衡
- GEO2R/GEOquery的结果可能是错的!!!
- DBUtils 主要结果集说明
- Python算术运算符目录
- PHP的分页原理和简单实例
- IT人母亲的美国之行(8)
- hdu Hike on a Graph
- 深入理解JavaScript系列(31):设计模式之代理模式
- 2019Deecamp面试经验分享
- Android常见面试题字节跳动、阿里、腾讯2019实习生Android岗部分面试题
- android 自定义数字键盘
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传
- linux相关命令------文件内容显示以及文件其他命令
- SAP---安装方法