再探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文件,然 ...
随机推荐
- Tkinter 导入安装包
Tkinter (capitalized) refers to versions <3.0. tkinter (all lowecase) refers to versions ≥3.0
- 迈向angularjs2系列(1):typescript指南
typescript指南 前言 typescript是angularjs2推荐使用的脚本语言.它由微软2012年首次发布. 一. typescript和javascript的区别 1.从遵循的规 ...
- 传参时Url中有中文报错
url中如果传了中文,浏览器会报错:The header content contains invalid characters. 原因:浏览器自动把这个url进行decodeURIComponent ...
- 用最简单的方法判断JavaScript中this的指向
目录 * 一个特例 * 开始判断 * 法则一:对象方法中的this指向对象本身(箭头函数形式的除外) * 法则二:多层嵌套函数中的this指向等同于包含该this的最近一个function的this ...
- [转]Java se 7 最新特性研究(一)
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp81 从2006到现在等待了多年的jdk7终于发布了.这里将对它的一些 ...
- sql执行机制
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp38 sql执行机制 1.对于普通的sql语句只有where条件的执行机制 ...
- 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt388 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与 ...
- asp.net MVC下使用rest
前言 最近做了下个MVC的项目,需要用到rest接口,与java写的应用程序通信,包括数据的接收和发送,那么我将用实用的角度来全面的讲解一下它的使用方法 一.创建rest服务 首先创建一个Asp.Ne ...
- 介绍call和apply
function add(a, b) { alert(a + b); } function sub(a, b) { alert(a - b); } add.call(sub, 1,3); //4 传 ...
- 201521123100《Java程序设计》第八周学习总结
---恢复内容开始--- 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 ...