这次做了提纲


下面再来一个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 在『使用』的时候初始化的一个体现,这里注意体会使用!

再探Spring IOC的更多相关文章

  1. Spring IOC之容器概述

    1.SpringIOC容器和beans介绍 IOC的依赖注入是这样的,对象定义他们的依赖也就是他们需要在一起起作用的对象是通过构造器参数以及工厂方法的参数或者是当他们被构建或者是从工厂中返回时设置在对 ...

  2. 面试被问烂的 Spring IOC(求求你别再问了)

    广义的 IOC IoC(Inversion of Control) 控制反转,即"不用打电话过来,我们会打给你". 两种实现: 依赖查找(DL)和依赖注入(DI). IOC 和 D ...

  3. Spring IOC 容器预启动流程源码探析

    Spring IOC 容器预启动流程源码探析 在应用程序中,一般是通过创建ClassPathXmlApplicationContext或AnnotationConfigApplicationConte ...

  4. Spring学习之旅(四)Spring工作原理再探

    上篇博文对Spring的工作原理做了个大概的介绍,想看的同学请出门左转.今天详细说几点. (一)Spring IoC容器及其实例化与使用 Spring IoC容器负责Bean的实例化.配置和组装工作有 ...

  5. spring:spring再总结(ioc、aop、DI等)

    IOC(Inversion of Control),即"控制反转",不是一种技术而是一种思想 1.IOC的理解 Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部 ...

  6. Spring IoC源码解析——Bean的创建和初始化

    Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...

  7. Spring IOC 容器源码分析 - 循环依赖的解决办法

    1. 简介 本文,我们来看一下 Spring 是如何解决循环依赖问题的.在本篇文章中,我会首先向大家介绍一下什么是循环依赖.然后,进入源码分析阶段.为了更好的说明 Spring 解决循环依赖的办法,我 ...

  8. Spring IOC容器启动流程源码解析(四)——初始化单实例bean阶段

    目录 1. 引言 2. 初始化bean的入口 3 尝试从当前容器及其父容器的缓存中获取bean 3.1 获取真正的beanName 3.2 尝试从当前容器的缓存中获取bean 3.3 从父容器中查找b ...

  9. 【初探Spring】------Spring IOC(三):初始化过程---Resource定位

    我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean.同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然 ...

随机推荐

  1. 调试大叔V1.0.1(2017.09.01)|http/s接口调试、数据分析程序员辅助开发神器

    2017.09.01 - 调试大叔 V1.0.1*支持http/https协议的get/post调试与反馈:*可保存请求协议的记录:*内置一批动态参数,可应用于URL.页头.参数:*可自由管理cook ...

  2. 安装Hadoop 2.7.3的过程中遇到的一些问题及解决方法。

    1. 启动hadoop 时发现namenode 没有启动起来 出现以下错误: Incorrect configuration: namenode address dfs.namenode.servic ...

  3. Struts拦截器解析

    内建拦截器可以去struts-core.jar中的struts-default.xml文件中查看: 在没有引用内建拦截器时,已经帮我们指定了一个默认的拦截器: 使用的软件为MyEclipse:很强大!

  4. HTML图像

    HTML 图像- 图像标签( <img>)和源属性(Src) 在 HTML 中,图像由<img> 标签定义. <img> 是空标签,意思是说,它只包含属性,并且没有 ...

  5. PHP访问连接MYSQL数据库

    1.连接数据库       使用mysql_connect()函数建立与MySQL数据库的连接 源码:$con=mysql_connect("主机名或IP","用户名&q ...

  6. SQL分组查询

      把数据分成多个逻辑组,以便能对每个组的数据进行操作,对每个组进行聚集计算. 1.创建分组 分组是在SELECT语句的GROUP BY子句中建立的 例子:         SELECT vendId ...

  7. 用xml画水平虚线和竖直虚线.md

    1.画水平虚线 直接建一个shape,设置stroke属性就行了,再将这个属性直接作为background的drawable属性引入就行了 注意在4.0以上的真机加一句 <?xml versio ...

  8. [2016-03-15]rabbitmq notes

    安装 系统:CentOS 6 环境: rabbitmq 依赖的Erlang环境包 wget https://www.rabbitmq.com/releases/erlang/erlang-18.1-1 ...

  9. Java集合类库list(1)ArrayList实例

    public class ArrayListTest { public static void main(String[] args) { //创建空的ArrayList列表 ArrayList al ...

  10. 原创: rsync软件服务利用ansible实现一键化部署

    ---恢复内容开始--- 首先创建一个脚本文件 /server/tools/peizhi.sh cat  /server/tools/peizhi.sh cat >>/etc/rsyncd ...