关于springboot项目中自动注入,但是用的时候值为空的BUG
最近想做一些web项目来填充下业余时间,首先想到了使用springboot框架,毕竟方便 快捷
首先:去这里 http://start.spring.io/ 直接构建了一个springboot初始化的项目框架
然后:在页面上选择相应的依赖包,然后点击构建按钮,然后下载并且导入IDE中,目前喜欢使用IDEA
于是一个简答的springboot项目就搭建好了
废话说完,然后想体验下spring中redis的使用;
那就直接新建了一个类,然后 @Autowired 自动注入 RedisTemplate 类,当然在这个类上面是要加上 @Component 注解的。
但是问题来了,在这个类下面创建了一个方法,然后方法里面调用redisTemplate的时候,提示为null,这是为什么呢?
下面是尝试了各种网上分享的解决方案中认为比较有用的几种方式:
1.注解没有扫描到,问题原因可能是springboot启动类没有放到最外层的包的根目录下面
因为springboot启动的时候会自动扫描启动类所在包的所有子包里面包含的注解,如果启动类放错了位置,会导致注解扫描不到
具体逻辑,请看
@SpringBootApplication 注解中包含的 @ComponentScan 这个注解的解析,就是扫描注解的一些逻辑
2.调用的时候,使用的对象是被new出来的,而不是spring自动注入进来的,没有被spring来管理,所以当然为null
比如:在类 A里面 注入了 redisTemplate 然后,springboot项目启动之后在A类里面又创建了一个 main方法,然后在main里面,new A(); 来创建一个A的实例,然后再A.redisTemplate 进行调用,获取到的就是一个NULL值
故:解决方式就是 如果想要使用 @Autowired注入一些springboot自动管理的工具的话,比如 redisTemplate / jdbcTemplate 等等,要么就是直接在启动类里面进行注入,不过这样用的比较少,一般都会新建一个类,然后在里面进行注入,
但是如果想要使用的话需要继承这个类,然后再子类中进行使用,比如使用redisTemplate 和 jdbcTemplate 的话,就可以创建一个 DataSourceConfig 类,然后自动注入 redisTemplate 和 jdbcTemplate 然后新建两个方法, getRedisTemplate() 和 getJdbcTemplate()
里面对应的返回相应的 template ,然后在 dao 中使用的时候就可以直接继承 DataSourceConfig ,然后直接使用 getRedisTemplate() 和 getJdbcTemplate() 这两个方法,来获取到redis 和jdbcTemplate 进行数据的操作
以上仅为本人最近遇到的一个比较无语的bug解决之后的备忘,以后勿犯
但是如果刚接触springboot的话,可能会遇到此类问题,欢迎一起探讨
如有帮助到后来人,则功德无量
关于springboot项目中自动注入,但是用的时候值为空的BUG的更多相关文章
- springboot拦截中自动注入的组件为null问题解决方法
一.写SpringUtil类来获取Springh管理的类实例,判断是否注入成功,如果没有注入成功重新获取注入 package com.util; import org.springframework. ...
- springboot 项目中获取默认注入的序列化对象 ObjectMapper
在 springboot 项目中使用 @SpringBootApplication 会自动标记 @EnableAutoConfiguration 在接口中经常需要使用时间类型,Date ,如果想要格式 ...
- SpringBoot12 QueryDSL01之QueryDSL介绍、springBoot项目中集成QueryDSL
1 QueryDSL介绍 1.1 背景 QueryDSL的诞生解决了HQL查询类型安全方面的缺陷:HQL查询的扩展需要用字符串拼接的方式进行,这往往会导致代码的阅读困难:通过字符串对域类型和属性的不安 ...
- SpringBoot项目中遇到的BUG
1.启动项目的时候报错 1.Error starting ApplicationContext. To display the auto-configuration report re-run you ...
- 国际化的实现i18n--错误码国际化以及在springboot项目中使用
国际化 ,英文叫 internationalization 单词太长 ,又被简称为 i18n(取头取尾中间有18个字母); 主要涉及3个类: Locale用来设置定制的语言和国家代码 Resource ...
- 在SpringBoot项目中添加logback的MDC
在SpringBoot项目中添加logback的MDC 先看下MDC是什么 Mapped Diagnostic Context,用于打LOG时跟踪一个“会话“.一个”事务“.举例,有一个web ...
- 自身使用的springboot项目中比较全的pom.xml
在学习的时候常建新的项目,mark下商用的jar <dependency> <groupId>org.mybatis</groupId> <artifactI ...
- 带你开发一款给Apk中自动注入代码工具icodetools(完善篇)【申明:来源于网络】
带你开发一款给Apk中自动注入代码工具icodetools(完善篇)[申明:来源于网络] 带你开发一款给Apk中自动注入代码工具icodetools(完善篇):http://blog.csdn.net ...
- springboot项目中js、css静态文件路径访问
springboot静态文件访问的问题,相信大家也有遇到这个问题,如下图项目结构. 项目结构如上所示,静态页面引入js.css如下所示. 大家肯定都是这样写的,但是运行的话就是出不来效果,图片也不显示 ...
随机推荐
- HttpUrlConnection流传输问题(正确传输包含中文的JSON字符串)
目前在写一个功能,主要是使用 HttpURLConnection 发送http请求调用外部接口.本来一切正常的,可是在发送post请求上传数据给服务端时,服务端返回错误信息:获取的JSON请求是乱码的 ...
- mvc5之文件上传
在写这篇博客之前,被网上的博客坑了一个遍. 浪费了很多的时间 最后还是靠一位兄弟解决的问题,不得不说,虽然网上资源多.但是大多数都是水货.如果那些人可以解决你的问题,那我这里明显就没用了,除非你和我一 ...
- Web API学习——Web API 强势入门指南
Web API是一个比较宽泛的概念.这里我们提到Web API特指ASP.NET Web API. 这篇文章中我们主要介绍Web API的主要功能以及与其他同类型框架的对比,最后通过一些相对复杂的实例 ...
- 【转载】MessageFormat.format方法
MessageFormat.format方法实例 public static void main(String[] args) { String a= "aaa"; String ...
- springBoot 随笔(一)
服务化的世界,越来越多应用拆分为微服务,有些为了业务而拆,也有为了技术而拆,也有什么都不知道就瞎拆的,反正就是要微服务. 以下为一个认识springBoot的简单过程 1/eclipse 新建 mav ...
- 20175212童皓桢 在IDEA中以TDD的方式对String类和Arrays类进行学习
20175212童皓桢 在IDEA中以TDD的方式对String类和Arrays类进行学习 要求 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 ...
- 学号20175212 《Java程序设计》第7周学习总结
学号20175212 <Java程序设计>第7周学习总结 教材学习内容总结 8.1.String类 可以使用String类声明对象并创建对象,例如: String s = new Stri ...
- 使用 ZipArchive 生成Zip文件备注
近两日研究了Abp.io 中模板项目的生成原理,是从Github下载源码包,进行修改.替换,然后生成新的zip包提供下载. 项目内部使用了 这个包 Ionic.Zip Version=" ...
- Mdate时间插件
在做移动端的页面时,用户报名某个活动,需要填写她的出生日期,这时可以用Mdate插件来完成,已达到更好的用户体验 操作很简单,效果也不错,是滑动选择时间的,也有回调函数方便我们使用.只需要在页面中引入 ...
- java基础概念
jre是java运行环境 jdk是java开发工具包 java源文件←编译class字节码文件←运行结构