最近想作一些web项目来填充下业余时间,首先想到了使用springboot框架,毕竟方便 快捷web
首先:去这里 http://start.spring.io/ 直接构建了一个springboot初始化的项目框架 redis
而后:在页面上选择相应的依赖包,而后点击构建按钮,而后下载而且导入IDE中,目前喜欢使用IDEAspring
因而一个简答的springboot项目就搭建好了springboot
废话说完,而后想体验下spring中redis的使用;框架
那就直接新建了一个类,而后 @Autowired 自动注入 RedisTemplate 类,固然在这个类上面是要加上 @Component 注解的。工具
可是问题来了,在这个类下面建立了一个方法,而后方法里面调用redisTemplate的时候,提示为null,这是为何呢?对象
下面是尝试了各类网上分享的解决方案中认为比较有用的几种方式:继承
1.注解没有扫描到,问题缘由多是springboot启动类没有放到最外层的包的根目录下面get
由于springboot启动的时候会自动扫描启动类所在包的全部子包里面包含的注解,若是启动类放错了位置,会致使注解扫描不到io
具体逻辑,请看
@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的话,可能会遇到此类问题,欢迎一块儿探讨
若有帮助到后来人,则功德无量