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. Jmeter(三)_配置元件

    HTTP Cookie Manager 用来存储浏览器产生的用户信息 Clear Cookies each Iteration:每次迭代请求,清空cookies,GUI中定义的任何cookie都不会被 ...

  2. Python安装与使用的常见问题

    1. Python安装问题 到Python官网下载Python最新版本 Windows x86-64 executable installer (64为操作系统选择这个) Windows x86 ex ...

  3. iOS中的颜色

    最近在改Bug的时候,才注意到iOS 中的颜色竟然也大有文章,特来记录一下. 先说一下问题,因为某界面中有用xib实现的一个view,而这个view 只在UIColletionView的layout ...

  4. 给定 n×n 的实数矩阵,每行和每列都是递增的,求这 n^2 个数的中位数。

    #define COL 4 #define ROW 4 int findMedian(int matrix[][COL], int row, int col) { int* arr = new int ...

  5. chrome官方完整安装包

    But did you know Google allows you to download the full standalone installer of Chrome from its offi ...

  6. 从Dynamics CRM2011到Dynamics CRM2016的升级之路

    CRM的产品更新特别快,特别是最近的几个版本,很多客户依旧停留在2011甚至是4.0,也经常会听到有人问2011能不能升级至最新版,2013能不能升级至最新版,本文将简单演示下从2011升级到2016 ...

  7. 查看4k对齐,激活.net framework 3.5

    查看是否4k对齐 Win+R,打开运行窗口,在窗口中输入“msinfo32",组件”--“存储”--“磁盘”.然后可以在右边栏看到“分区起始偏移”,我们图例中有2个数值,分别是:32256字 ...

  8. activiti processEngineLifecycleListener使用

    1.1.1. 前言 实际开发中,有需求如下: 第一:项目启动部署的时候,我们需要监控activiti 工作流引擎是否真正的已经实例化启动了,这里说的是工作流引擎的启动,不是流程实例的启动,对此要特别说 ...

  9. CCSpriteBatchNode中存放元素的一点理解

    该对象只能包含基于CCSprite的对象,并且该要求适用于一切子孙对象.即加入CCSpriteBatchNode的任何对象都必须是CCSprite或其子类. 比如CCSpriteBatchNode包含 ...

  10. Mac下hosts文件配置

    工作中总会因为莫名其妙的原因,比如Mac下面打不开某网站,但是在windows 7下面却可以,此时只需两步即可完成在Mac下面上网.在Windows下面Win+R,输入cmd,进入命令行,将在wind ...