Spring获取bean的步骤
1 处理&问题
2 去chache里找
3 处理对象A依赖对象B的问题
4 生成bean
4.1 处理方法注入 ------lookup-method
4.2 如果类实现了InstantiationAwareBeanPostProcessor接口就调用其postProcessBeforeInstantiation,如果返回值不为null就调用postProcessAfterInitialization方法,如果还是不为null就返回,省略后面的doCreatBean方法(等于短路了后面),如果postProcessBeforeInstantiation返回的就是null,那就继续往下走,看doCreateBean
4.3 doCreatBean
4.3.1 处理工厂方法 factory-method
4.3.2 允许Annotation修改bean 例如 @resource
4.3.3 处理循环依赖
4.3.4 调用postProcessAfterInitialization方法,如果返回false,程序就直接返回 等于短路后续的操作
4.3.5 处理 @Autowire
4.3.6 属性注入 @resource
4.3.7 类型转换 调用InstantiationAwareBeanPostProcessor的postProcessPropertyValues方法 其实就是将字符串转换为需要的对象如把 字符串"2015-12-12"转成date型的对象
4.3.8 处理 XXAware接口的实现
4.3.9 处理 postProcessBeforeInitialization
4.3.10 处理 InitializingBean的afterPropertiesSet
4.3.11 处理 custom Init方法
4.3.12 处理 postProcessAfterInitialization
5 存入cache
6 容器关闭时,销毁对象(仅仅适用于Singleton对象)
其中,4.3.4-4.3.7是属性注入
4.3.4-4.3.12 都可作为bean的生命周期考虑
看一个网上流传甚广的bean生命周期图
////////////////////////////////////////////////////////////
以下为2016-04-20增加
其实getBean部分,主要可以分为3个部分
1-InstantiationAwareBeanPostProcessor 的短路与设值
2-XXXAware的处理
3-初始化BeanPostProcessor的Before与after,还有中间的init-method方法
而这三个部分都是BeanPostProcessor
InstantiationAwareBeanPostProcessor 实现了BeanPostProcess
对xxxaware的处理是借用的ApplicationContextAwareProcessor,它也实现了BeanPostProcess
以上为2016-04-20增加
////////////////////////////////////////////////////////////
参考资料
http://997004049-qq-com.iteye.com/blog/1729793
Spring获取bean的步骤的更多相关文章
- paip.spring 获取bean getBean 没有beanid的情况下
paip.spring 获取bean getBean 没有beanid的情况下 spring能自动扫描带有注解的bean文件.. 作者Attilax 艾龙, EMAIL:1466519819@q ...
- spring获取bean的时候严格区分大小写
如题:spring获取bean的时候严格区分大小写 配置文件helloservice.xml中配置: <dubbo:reference id="IInsurance" int ...
- Spring获取bean工具类,可用于在线程里面获取bean
Spring获取bean工具类,可用于在线程里面获取bean import java.util.Locale; import org.springframework.beans.BeansExcept ...
- Spring获取bean的几种方式
工作中需要对一个原本加载属性文件的工具类修改成对数据库的操作当然,ado层已经写好,但是需要从Spring中获取bean,然而,工具类并没有交给Spring来管理,所以需要通过方法获取所需要的bean ...
- Spring获取bean的一种方式
随便一百度,网上一大把,并且还不止一种.所以这里就只记录目前用的一种好了. 实现ApplicationContextAware接口 即可: import org.springframework.bea ...
- spring 获取 bean
不通过注解或者是配置文件怎么获取spring中定义的bean呢?有几个方法: 1.实现ApplicationContextAware <bean class="com.xxx.Spri ...
- Spring 获取bean
方法一: ApplicationContext ap = new ClassPathXmlApplicationContext("applicationContext.xml"); ...
- Spring获取bean的工具类
package com.tech.jin.util; import org.springframework.context.ApplicationContext; import org.springf ...
- Spring 获取bean 几种方式
转载自: http://www.cnblogs.com/luoluoshidafu/p/5659574.html 1.读取xml文件的方式,这种在初学入门的时候比较适用 . ApplicationCo ...
随机推荐
- Spring + Mybatis 集成原理分析
由于我之前是写在wizNote上的,迁移过来比较浪费时间,所以,这里我直接贴个图片,PDF文件我上传到百度云盘了,需要的可直接下载. 地址:https://pan.baidu.com/s/12ZJmw ...
- LintCode题解之最长单词
这些一次遍历搞定的,套路无非都是在遍历的时候就记录数据的状态,然后根据遍历到的当前的数据的状态来修改最终结果,当遍历完了的时候结果也就确定了. public class Solution { /* * ...
- Codeforces Round #396(Div. 2) A. Mahmoud and Longest Uncommon Subsequence
[题意概述] 找两个字符串的最长不公共子串. [题目分析] 两个字符串的最长不公共子串就应该是其中一个字符串本身,那么判断两个字符串是否相等,如果相等,那么肯定没有公共子串,输出"-1&qu ...
- Spark核心类:弹性分布式数据集RDD及其转换和操作pyspark.RDD
http://blog.csdn.net/pipisorry/article/details/53257188 弹性分布式数据集RDD(Resilient Distributed Dataset) 术 ...
- 23 服务的创建Demo1
结构 MainActivity.java package com.qf.day23_service_demo1; import android.app.Activity; import android ...
- [mysql]创建数据库并指定编码
现在用orm比较多,很多mysql表啊都不用自己创建,但是数据库还是要自己创建,记录下sql, 备忘. CREATE DATABASE `mydb` CHARACTER SET utf8 COLLAT ...
- 64位Linux下安装mysql-5.7.13-linux-glibc2.5-x86_64 || 转载:http://www.cnblogs.com/gaojupeng/p/5727069.html
由于公司临时让将Oracle的数据移植到mysql上面,所以让我在公司服务器上面安装一下mysql.下面就是我的安装过程以及一些错误解决思路.其实对于不同版本安装大体都有差不多. 1. 从官网下载 m ...
- 在电脑上安装Linux操作系统
1硬件需求 A 一台电脑 B 一个优盘 2软件需求 A制作优盘启动盘的软件PowerISO BLinux操作系统的镜像文件 3安装PowerISO,并使用PowerISO A安装PowerISO B插 ...
- JAVA面向对象-----接口与类、接口之间的关系
接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...
- 5.关于QT中的网络编程,QTcpSocket,QUdpSocket
1 新建一个项目:TCPServer.pro A 修改TCPServer.pro,注意:如果是想使用网络库,需要加上network SOURCES += \ TcpServer.cpp \ T ...