sping IOC和DI 初始化和关系
springIOC和spring DI作为spring core的核心思想,有必要学习下才能更好的使用spring
===================================================================================
- AbstractXmlApplicationContext abstractXmlApplicationContext=new ClassPathXmlApplicationContext("spring/springioc.xml");
- abstractXmlApplicationContext.getBean("animal", AnimalFactoryBean.class);
1.spring ioc是什么?
spring ioc 翻译成中文就是控制反转,在spring中的本质是BeanFactory,具体在DefaultListableBeanFactory 类中beanDefinitionMap,存放着所有需要初始化的bean的信息,更具体一点,指的是被<bean>标签和@Configuration,@Bean等注解修饰的类. BeanDefinition 是被解析出来的bean的属性,包括单例,作用域等.可以说,ioc本身只做三件事情,定位资源eg:"spring/springioc.xml",解析每个bean的属性封装成BeanDefinition ,注册BeanDefinition 到beanDefinitionMap.解析的过程较为复杂...
2.什么是DI
DI就是依赖注入,依赖注入是每个bean实例化的时候,如果属性依赖其他对象,需要实例化其他对象,实例化的过程交由spring 来完成,实例化后的存放在DefaultSingletonBeanRegistry 类 singletonObjects(map),属性中DefaultListableBeanFactory实现了DefaultSingletonBeanRegistry
依赖注发生的时机
2.1.abstractXmlApplicationContext.getBean("animal", AnimalFactoryBean.class);
2.2<bean>非懒加载和@Configuration,@Bean等注解
3.spring 启动过程,ioc和di在哪里开始执行的
点开ClassPathXmlApplicationContext的构造方法,发现主要是refresh()方法 ioc主线
- ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory();-->this.refreshBeanFactory();-->this.loadBeanDefinitions(beanFactory);
dI主线refresh()开始
- this.finishBeanFactoryInitialization(beanFactory);-->beanFactory.preInstantiateSingletons();-->getBean(beanName);
4.spring DI什么时候使用cglib 策略产生bean(lookup-method 和 replace-method)?
http://blog.sina.com.cn/s/blog_4ada12a50100l3ap.html
https://www.cnblogs.com/ViviChan/p/4981619.html
源码http://blog.51cto.com/dba10g/1726519
流程:http://www.importnew.com/24254.html
https://my.oschina.net/iioschina/blog/837899
https://www.cnblogs.com/aspirant/p/9082858.html
https://www.cnblogs.com/davidwang456/p/4187012.html
https://www.cnblogs.com/ITtangtang/p/3978349.html
https://my.oschina.net/u/206123/blog/1553564
sping IOC和DI 初始化和关系的更多相关文章
- Ioc和DI之间的关系(依赖注入的核心概念)
1.开篇闲话 由于之前做的很多项目都没接触到这个,后来到了另一个公司,他们的代码结构是基于领域驱动设计的,其中里面的对象都是通过依赖注入方式(Sprint.NET)实现的,也大致了解了哈,在网上搜了些 ...
- Sping IOC 理解(转)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- Spring MVC -- Spring框架入门(IoC和DI)
Spring MVC是Spring框架中用于Web应用开发的一个模块.Spring MVC的MVC是Model-View-Controller的缩写.它是一个广泛应用于图像化用户交互开发中的设计模式, ...
- IOC和DI 控制反转和依赖注入
首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/b ...
- SSM框架中IoC、DI与AOP的理解
框架封装了普通项目中程序员需要重复书写的代码和调用过程,就比如说在传统的jsp项目中,我们的controller接收到前端的请求然后程序员就需要去开发Dao层,里面还涉及数据库的连接和存储过程的代码, ...
- Spring 学习教程(一):浅谈对Spring IOC以及DI的理解
一.个人对IoC(控制反转)和DI(依赖注入)的理解我们平时在开发java web程序的时候,每个对象在需要使用它的合作对象时,自己都要将它要合作对象创建出来(比如 new 对象),这个合作对象是由自 ...
- IOC 和DI(转载)
IOC 是什么? Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内 ...
- (转)spring IOC、DI理解
转自: http://www.cnblogs.com/xdp-gacl/p/4249939.html 个人理解: IOC控制反转,反转的是获取依赖对象的方式.传统的应用在存在依赖关系时,比如A依赖于B ...
- 对Spring Ioc 以及DI的精彩理解
转:http://blog.csdn.net/cyjs1988/article/details/50352916 学习过spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注 ...
随机推荐
- slice和splice
slice //截取数组或者字符串,返回数组或字符串 //jquery方法截取元素,构成新的对象 splice //增加,修改,删除数组
- Spring的LoadTimeWeaver(代码织入)(转)
https://www.cnblogs.com/wade-luffy/p/6073702.html 在Java 语言中,从织入切面的方式上来看,存在三种织入方式:编译期织入.类加载期织入和运行期织入. ...
- Tomcat7启动分析(三)Digester的使用(转载)
原文 http://tyrion.iteye.com/blog/1912290 前一篇文章里最后看到Bootstrap的main方法最后会调用org.apache.catalina.startup.C ...
- [UE4]使用Is Locally Controlled解决第一人称和第三人称武器位置问题
一.在第一人称网络游戏中,自己看到的是第一人称,其他玩家看到的自己是第三人称. 二.由于第一人称和第三人称是不同的模型,所以枪在模型上面的插槽位置也会不一样. 三.在武器挂载在人物模型的使用,使用“I ...
- Linux入门:常用命令:查看硬盘、分区、CPU、内存信息
查看硬盘信息 $df -lh #查看所有硬盘的使用状 $du -sh /etc #查看etc目录大小 #获得文件大小很方便,主要是目录 外部系统挂载 $mount ...
- Hash 迭代程序构造器要求字符串参数--错误解决
报错提示: ERROR: Hash 迭代程序构造器要求字符串参数,位置: 行 56 列 23.ERROR: DATA STEP 组件对象失败.在“EXECUTION”阶段中止.NOTE: 由于出错,S ...
- CentOS安装nginx以及负载均衡的搭建
依赖环境,没有安装的需要安装一下 yum install gcc yum install pcre-devel yum install zlib zlib-devel yum install open ...
- CNN卷积层基础:特征提取+卷积核+反向传播
本篇介绍卷积层的线性部分 一.与全连接层相比卷积层有什么优势? 卷积层可以节省参数,因为卷积运算利用了图像的局部相关性——分析出一小片区域的特点,加上Pooling层(汇集.汇聚),从附近的卷积结果中 ...
- Delphi2010如何获取程序内部自身版本号?
用原来的GetFileVersionInfo只能获取Delpi7的程序版本号,用在Delphi2010中就不管用了 //------ 获取文件版本号function F_GetFileVersion( ...
- Delphi SetParent 嵌入其他应用程序
[代码]Delphi实现窗体内嵌其他应用程序窗体 实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达 ...