最近想做一些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的更多相关文章

  1. springboot拦截中自动注入的组件为null问题解决方法

    一.写SpringUtil类来获取Springh管理的类实例,判断是否注入成功,如果没有注入成功重新获取注入 package com.util; import org.springframework. ...

  2. springboot 项目中获取默认注入的序列化对象 ObjectMapper

    在 springboot 项目中使用 @SpringBootApplication 会自动标记 @EnableAutoConfiguration 在接口中经常需要使用时间类型,Date ,如果想要格式 ...

  3. SpringBoot12 QueryDSL01之QueryDSL介绍、springBoot项目中集成QueryDSL

    1 QueryDSL介绍 1.1 背景 QueryDSL的诞生解决了HQL查询类型安全方面的缺陷:HQL查询的扩展需要用字符串拼接的方式进行,这往往会导致代码的阅读困难:通过字符串对域类型和属性的不安 ...

  4. SpringBoot项目中遇到的BUG

    1.启动项目的时候报错 1.Error starting ApplicationContext. To display the auto-configuration report re-run you ...

  5. 国际化的实现i18n--错误码国际化以及在springboot项目中使用

    国际化 ,英文叫 internationalization 单词太长 ,又被简称为 i18n(取头取尾中间有18个字母); 主要涉及3个类: Locale用来设置定制的语言和国家代码 Resource ...

  6. 在SpringBoot项目中添加logback的MDC

    在SpringBoot项目中添加logback的MDC     先看下MDC是什么 Mapped Diagnostic Context,用于打LOG时跟踪一个“会话“.一个”事务“.举例,有一个web ...

  7. 自身使用的springboot项目中比较全的pom.xml

    在学习的时候常建新的项目,mark下商用的jar <dependency> <groupId>org.mybatis</groupId> <artifactI ...

  8. 带你开发一款给Apk中自动注入代码工具icodetools(完善篇)【申明:来源于网络】

    带你开发一款给Apk中自动注入代码工具icodetools(完善篇)[申明:来源于网络] 带你开发一款给Apk中自动注入代码工具icodetools(完善篇):http://blog.csdn.net ...

  9. springboot项目中js、css静态文件路径访问

    springboot静态文件访问的问题,相信大家也有遇到这个问题,如下图项目结构. 项目结构如上所示,静态页面引入js.css如下所示. 大家肯定都是这样写的,但是运行的话就是出不来效果,图片也不显示 ...

随机推荐

  1. iptables命令使用详解

    iptables的主要功能是实现对网络数据包进出设备及转发的控制.当数据包需要进入设备.从设备中流出或者经该设备转发.路由时,都可以使用iptables进行控制. 环境 操作系统:CentOS7.3 ...

  2. 『高性能模型』Roofline Model与深度学习模型的性能分析

    转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...

  3. subline 建立服务器

    http://blog.csdn.net/csdn_chenli/article/details/53173953

  4. element-ui <el-date-picker> 回显格式 yyyy-MM-dd 传值格式 yyyyMMddHHmmss

    <template> <!-- 需求:使用 <el-date-picker> 日期插件 前端显示2018-10-22 后台需要传时间戳,对这个日期插件不熟悉,当时搞了好长 ...

  5. jQuery和Vue的区别

    1.jQuery和Vue的区别 jQuery是使用选择器($)选取DOM对象,对其进行赋值.取值.事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起 ...

  6. raid10模型比raid01模型的冗余度高

    RAID10和RAID01的冗余度看起来差不多,但本质上有一定的区别. RAID10:左边损坏1块盘,右边还可以容忍一块盘损坏而不影响整体的数据;冗余度=2 RAID01:左边损坏1块盘,此时左边已经 ...

  7. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.7 Adding a wms layer

    MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.7 Adding a wms layer 前言 Add OGC WMS Layers( ...

  8. 大量数据的excel导出

    对于大型excel的创建且不会内存溢出的,就只有SXSSFWorkbook了.它的原理很简单,用硬盘空间换内存(就像hash map用空间换时间一样). private void writeToAla ...

  9. 小白的python之路Linux部分10/28&29

    属主属组其他人对文件的rwx权限 1.userdel删东西不全,会有残留,

  10. python学习------面向对象进阶

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object) ...