zoukankan      html  css  js  c++  java
  • 记录一次@Autowire和@Resource遇到的坑

            今天在用shiro做缓存清除的时候,碰到个问题是:使用@Autowired注解注入的SessionDao类 初始化是正常的,但是在使用的时候,类里面的AuthorizingRealm 一直为空。 让我自己郁闷了好半天。 按照道理,类初始化时候 交给了spring容器来处理,默认spring使用单例模式,后面是不可能为空的,为什么自己加了断点在初始化时候是好的,但是在使用时候 里面的对象属性就是空的呢?

      时候时候断点属性为空截图:

       

    ,然后同事说 要不在使用RedisSessionDao的注入属性时候使用@Resource(name="初始化的名称")试试  然后这样试了下,竟然是可以的

      

     

    然后赶紧搜了下@Resource和@Autowired 的区别:

      按照自己的理解是这样的:如果只有一个bean,使用@Autowired 时候,bean的名称是 首字母小写后的类名,比如我这个RedisSessionDAO ,如果我在初始化时候的@Bean 名称是 redisSessionDAO ,那么直接使用 @Autowired 是可以生效的;

    如果不想这样,@Bean 里面有其他的名称,可以使用下面两种方法:

    1.使用@Resource(name="sessionDAO") name里面的名称是@bean后面的名称

    2.使用@Autowired 后面使用 @Qualifier("sessionDAO)方式。这样也是可以的

    然后在自己项目里面验证了下,这几种方式都是可以的

  • 相关阅读:
    maven的pom.xml文件详细说明
    python 给视频添加马赛克
    cv2.VideoCapture 图像旋转问题
    三分钟理解知识蒸馏
    深度学习、机器学习常见概念及理解(持续更新)
    python用直方图规定化实现图像风格转换
    1分钟理解人体姿态估计与行为识别
    数据清洗要点
    3分钟理解NMS非极大值抑制
    python用pandas遍历csv文件
  • 原文地址:https://www.cnblogs.com/thinkingandworkinghard/p/12520133.html
Copyright © 2011-2022 走看看