再探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 在『使用』的时候初始化的一个体现,这里注意体会使用!
再探Spring IOC的更多相关文章
- Spring IOC之容器概述
1.SpringIOC容器和beans介绍 IOC的依赖注入是这样的,对象定义他们的依赖也就是他们需要在一起起作用的对象是通过构造器参数以及工厂方法的参数或者是当他们被构建或者是从工厂中返回时设置在对 ...
- 面试被问烂的 Spring IOC(求求你别再问了)
广义的 IOC IoC(Inversion of Control) 控制反转,即"不用打电话过来,我们会打给你". 两种实现: 依赖查找(DL)和依赖注入(DI). IOC 和 D ...
- Spring IOC 容器预启动流程源码探析
Spring IOC 容器预启动流程源码探析 在应用程序中,一般是通过创建ClassPathXmlApplicationContext或AnnotationConfigApplicationConte ...
- Spring学习之旅(四)Spring工作原理再探
上篇博文对Spring的工作原理做了个大概的介绍,想看的同学请出门左转.今天详细说几点. (一)Spring IoC容器及其实例化与使用 Spring IoC容器负责Bean的实例化.配置和组装工作有 ...
- spring:spring再总结(ioc、aop、DI等)
IOC(Inversion of Control),即"控制反转",不是一种技术而是一种思想 1.IOC的理解 Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部 ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
- Spring IOC 容器源码分析 - 循环依赖的解决办法
1. 简介 本文,我们来看一下 Spring 是如何解决循环依赖问题的.在本篇文章中,我会首先向大家介绍一下什么是循环依赖.然后,进入源码分析阶段.为了更好的说明 Spring 解决循环依赖的办法,我 ...
- Spring IOC容器启动流程源码解析(四)——初始化单实例bean阶段
目录 1. 引言 2. 初始化bean的入口 3 尝试从当前容器及其父容器的缓存中获取bean 3.1 获取真正的beanName 3.2 尝试从当前容器的缓存中获取bean 3.3 从父容器中查找b ...
- 【初探Spring】------Spring IOC(三):初始化过程---Resource定位
我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean.同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然 ...
随机推荐
- hdu 6096---String(AC自动机)
题目链接 Problem Description Bob has a dictionary with N words in it.Now there is a list of words in whi ...
- Java jdk 快速配置
JAVA_HOME C:\Program Files\Java\jdk1.8.0_92 Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; CLASSPATH ...
- java 运行时常量、编译时常量、静态块执行顺序
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt223 常量是程序运行时恒定不变的量,许多程序设计语言都有某种方法,向编译器告 ...
- 汇编指令-MRS(读)和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用(1)
1.MSR和MRS指令介绍 MRS 指令: 对状态寄存器CPSR和SPSR进行读操作.通过读CPSR可以获得当前处理器的工作状态.读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有 ...
- test文件伪装
该文件属于伪装图片类型.图片另存后把后缀改为rar将看到txt文件. 利用了 cmd cp /b 命令 命令格式:copy /b 文件1+文件2+......文件N 合并后的文件名<br&g ...
- NFA的实现
此次发表的是一个不确定的自动机(NFA),它可以根据输入的正规式输出由函数映像表示的结果. 此版本可以输入括号'(',')',但是,实现的过程理解起来有点吃力,所以,在时间允许的情况下,我还将写新文章 ...
- 怎么调用api接口
api的简单调用,调用api的方法 方法一:用前端方法调用api 完整代码: <!DOCTYPE html> <html lang="en"> <he ...
- CentOS7中将home迁移到/下的命令
CentOS7中将home迁移到/下的命令
# mkdir -p /backup # cp -r /home/* /backup # umount /home # df -hl # fdisk -l # lvremove /dev/cento ...
- 201521123096《Java程序设计》第八周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 实验中使用了s ...
- 201521123010 《Java程序设计》第1周学习总结
1. 本周学习总结 第一次接触java,在与以前不同的环境下运行,初步只接触了其中的冰山一角,但也发现了java身后庞大的资源,因此也想通过对java的学习来丰富自己对编程,甚至资源的认识.本周通过学 ...