zoukankan      html  css  js  c++  java
  • 再探Spring IOC

    这次做了提纲


    下面再来一个case study

    case描述:

    这是工具类  //bean的配置信息略去

    class MyUtil{

     private static UserDao userDao;

     private LogDao logDao;

    public static void test(){

     userDao.method1();

    }

    //set 方法略去 值得一提的是(在Spring 2.5.6) 此时利用IDEA  自动生的 带有static的set方法 无法完成注入 

    }

    第三方类

    Class User{

    MyUtil.test();

    }

    此时按照我最初的预想 应该报一个NPE 错误的

    因为思维定势 我觉着User类里 一定要有@resource之类的标签注入一个MyUtil实例  就想不通为什么此时直接通过类Util调用静态方法 UserDao不是空

    后来在test方法加断点,此时 userDao非空,而logDao结果很暧昧(即不显示为空也不显示具体值) 

    我是这么理解的,在Spring启动的时候  实例化了这个Util Bean 如果按照正常的用法 通过@resource将一个具体的实例和Spring启动时生成的util bean的实例关联再去使用,但是此时调用的是类的静态方法,是不是在Spring实例化初始bean的时候 就把该Bean内部的静态bean和当前的类绑定了呢? 现在是这么理解的 具体依据还没有找到。

    结论:

    工具类(已经配置为单例bean)内部的静态属性bean是可以在spring启动的时候注入进来的,所以此时可以通过Util.staticMethod() //方法中使用了属性静态bean   这时候不会报NPE

    而工具类配置为多例bean的时候,内部的属性bean不会注入,且在调用处, 通过Util.staticMethod()  这个时候方法内部用到的bean 还是空 没有被注入,这个时候可以在调用类中通过@resource 注入Util类,通过实例方法调用staticMethod()  

    这也就是所谓的多例bean 在『使用』的时候初始化的一个体现,这里注意体会使用!

  • 相关阅读:
    加载页面(Loading)
    js判断手机连接网络类型
    combotree的加载方法
    jquery.util.easyui.dialog
    datagrid后台分页js.js
    安卓使用Canvas绘制工作日程表
    【Oracle】OGG数据初始化之RMAN
    怎样优雅的管理ActionBar
    openwrt undefined reference to ‘getpwent_r’
    通过文件对照工具Merge数据库
  • 原文地址:https://www.cnblogs.com/luyu1993/p/7354008.html
Copyright © 2011-2022 走看看