zoukankan      html  css  js  c++  java
  • SpringBoot拦截器中service或者redis注入为空的问题

    原文:https://my.oschina.net/u/1790105/blog/1490098

    这两天遇到SpringBoot拦截器中Bean无法注入问题。下面介绍我的思考过程和解决过程:

    1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Bean无法注入是在拦截器中无效的问题,一直在查找注解指定的包在哪里配置的,然而却找不到配置,Springboot是用java类的形式加载配置的。在网络的某个角落看到这样的说法:

    SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!
    “Application类”是指SpringBoot项目入口类。这个类的位置很关键:
    如果Application类所在的包为:com.boot.app,则只会扫描com.boot.app包及其所有子包,如果service或dao所在包不在com.boot.app及其子包下,则不会被扫描!
    即, 把Application类放到dao、service所在包的上级,com.boot.Application
    知道这一点非常关键,不知道spring文档里有没有给出说明,如果不知道还真是无从解决。

    我出问题的类确实在Application类子包下面,看来不是这方面问题。

    2.开始意识到只是拦截器上会有这样的问题,查询原因应该是:

    拦截器执行在自动bean初始化之前导致这个问题的。

    那就只是在拦截器中出现该问题了,解决办法如下:

    首先上图是我的拦截器和要注入的iRedisUtil对象,出问题的就是这个iRedisUtil。

    要解决问题是在项目中继承“WebMvcConfigurerAdapter”类的类中添加拦截器类作为一个Bean,如下:

    现在去运行,发现iRedisUtil对象有值了。

  • 相关阅读:
    【个人杂谈】MacBook Pro的使用心得
    【网页加速】lua redis的二次升级
    使用Openresty加快网页速度
    中间件——canal小记
    Java面试总结(二)
    RedissonLock分布式锁源码分析
    面试总结
    Spring AOP小记
    谈谈个人网站的建立(八)—— 缓存的使用
    Kafka、Logstash、Nginx日志收集入门
  • 原文地址:https://www.cnblogs.com/shihaiming/p/7988625.html
Copyright © 2011-2022 走看看