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的步骤的更多相关文章

  1. paip.spring 获取bean getBean 没有beanid的情况下

    paip.spring 获取bean  getBean 没有beanid的情况下 spring能自动扫描带有注解的bean文件.. 作者Attilax  艾龙,  EMAIL:1466519819@q ...

  2. spring获取bean的时候严格区分大小写

    如题:spring获取bean的时候严格区分大小写 配置文件helloservice.xml中配置: <dubbo:reference id="IInsurance" int ...

  3. Spring获取bean工具类,可用于在线程里面获取bean

    Spring获取bean工具类,可用于在线程里面获取bean import java.util.Locale; import org.springframework.beans.BeansExcept ...

  4. Spring获取bean的几种方式

    工作中需要对一个原本加载属性文件的工具类修改成对数据库的操作当然,ado层已经写好,但是需要从Spring中获取bean,然而,工具类并没有交给Spring来管理,所以需要通过方法获取所需要的bean ...

  5. Spring获取bean的一种方式

    随便一百度,网上一大把,并且还不止一种.所以这里就只记录目前用的一种好了. 实现ApplicationContextAware接口 即可: import org.springframework.bea ...

  6. spring 获取 bean

    不通过注解或者是配置文件怎么获取spring中定义的bean呢?有几个方法: 1.实现ApplicationContextAware <bean class="com.xxx.Spri ...

  7. Spring 获取bean

    方法一: ApplicationContext ap = new ClassPathXmlApplicationContext("applicationContext.xml"); ...

  8. Spring获取bean的工具类

    package com.tech.jin.util; import org.springframework.context.ApplicationContext; import org.springf ...

  9. Spring 获取bean 几种方式

    转载自: http://www.cnblogs.com/luoluoshidafu/p/5659574.html 1.读取xml文件的方式,这种在初学入门的时候比较适用 . ApplicationCo ...

随机推荐

  1. CentOS 安装Docker

    CentOS 系列安装 Docker Docker 支持 CentOS6 及以后的版本. CentOS6 对于 CentOS6,可以使用 EPEL 库安装 Docker,命令如下 $ sudo yum ...

  2. 准备在CSDN知识库建立一个Ext JS的知识库

    CSDN近期正在建立一个知识库,目标是打造身边的技术百科全书 ,我觉得这创意挺好,就像stackoverflow一样,常见的问题在里面基本都有了,只要通过搜索就能找到所需的答案. 现在,大家对于Ext ...

  3. 永远不要在循环之外调用wait方法

    1. 前言 随着摩尔定律的失效,Amdahl定律成为了多核计算机性能发展的指导.对于现在的java程序员们来说,并发编程越来越重要和习以为常.很惭愧和恐慌的是我对java的并发编程一直是只知道概念,入 ...

  4. ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决

    ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决 首先,正常情况下,如果在ScrollView里嵌套ListView后,会发现ListView只显示1条数据 那么,为了解 ...

  5. java中八种基本数据类型以及它们的封装类,String类型的一些理解

    在我们面试或者考试过程中经常会考到八种基本数据类型以及它们的封装类,那么有哪八种基本数据类型呢?它们的封装类又是什么呢? 首先,八种基本数据类型分别是:int.short.float.double.l ...

  6. [OpenCV] 编译源程序 2.4.10 以支持 CUDA

    对源代码进行如下修改: H:\Software\opencv\sources\modules\gpu\src\nvidia\core\NCV.cu中添加 #include <algorithm& ...

  7. Android 使用DownloadManager进行版本更新的完整方案

    在Android App都会有版本更新的功能,以前我们公司是用友盟SDK更新功能,自己服务器没有这样的功能.版本检测.Apk下载都是使用友盟.最近看到友盟的版本更新SDK文档:十月份更新功能将会停止服 ...

  8. LibVLC自定义插件目录,获取FPS方法

    一.自定义插件目录 在Windows平台,使用LibVLC,只需要在VLC官网的nightly builds下载最新的win32 debug或win64 debug包, 解压缩之后,会有libvlc. ...

  9. Android开发艺术探索——第二章:IPC机制(上)

    Android开发艺术探索--第二章:IPC机制(上) 本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序列化 ...

  10. Java学习之栈和堆的区别

    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...