Spring IOC(3)----bean实例化

前面一节说到invokeBeanFactoryPostProcessors方法的调用来注册bean定义,这次来看看finishBeanFactoryInitialization这个方法实例化非懒加载的单例bean。

1.从getBean到doGetBean先尝试从单例缓存池里面获取:DefaultSingletonBeanRegistry#getSingleton;

2.如果获取到了就返回了,如果获取不到则通过bean定义:AbstractBeanFactory#getMergedLocalBeanDefinition;

3.根据bean定义去实例化bean:AbstractAutowireCapableBeanFactory#createBean;

4.期间会对AOP的切面信息进行解析缓存:AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation;

5.spring真正干活的方法一般都是doXXX,创建bean:AbstractAutowireCapableBeanFactory#doCreateBean;

6.实例化一个bean的包装对象(BeanWrapper):AbstractAutowireCapableBeanFactory#createBeanInstance,该方法内部实现及其复杂。。。。之后判断是否是单例,将对象暴露到缓存中,用于解决循环依赖问题;

7.对bean属性进行赋值:AbstractAutowireCapableBeanFactory#populateBean

8.对dean进行处理:AbstractAutowireCapableBeanFactory#initializeBean

1.回调Aware接口方法:AbstractAutowireCapableBeanFactory#invokeAwareMethods

2.调用bean的后置处理器生成代理对象返回(有可能生成对象返回):AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInitialization/AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization

9.最后添加到各级缓存中:DefaultSingletonBeanRegistry#addSingleton。

流程图:

Spring IOC(1-3)的流程图可以拼出来一个完整的从前期准备到注册bean定义,再到实例的流程,完整的流程如下

原文地址:https://www.cnblogs.com/nijunyang/p/11638560.html

时间: 2024-10-16 15:11:40

Spring IOC(3)----bean实例化的相关文章

spring加载bean实例化顺序

转载:http://blog.sina.com.cn/s/blog_525960510100ipwj.html http://blog.sina.com.cn/s/blog_6940cab30102uwma.html 问题来源: 有一个bean为 A,一个bean为B.想要A在容器实例化的时候的一个属性name赋值为B的一个方法funB的返回值. 如果只是在A里单纯的写着: private B b;private String name = b.funb(); 会报错说nullpointExce

Spring中的Bean——实例化

Bean的实例化 1.     构造器实例化:Spring容器通过Bean对应类中默认的无参构造方法来实例化Bean package com.itheima.instance.constructor; public class Bean1 { } <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans&

Spring IOC 创建bean实例的方式

据我所知,创建bean实例的方式有4种方式~ 下面我会一一写出来这4种方式~ 第一种:xml文件中有bean的配置,而且这个bean所对应的java类中存在一个无参构造器,那么这个时候spring容器就可以使用反射调用无参构造器来创建实例了~ 代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/be

Spring IoC源码解析——Bean的创建和初始化

Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,MyBatis框架等组合使用. IoC介绍 IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控

Spring IoC Container and Spring Bean Example Tutorial

Spring Framework is built on the Inversion of Control (IOC) principle. Dependency injection is the technique to implement IoC in applications. This article is aimed to explain core concepts of Spring IoC container and Spring Bean with example program

Spring Ioc学习(一)

包含内容:什么是Ioc,作用,bean的创建,方式,配置,集合,作用域,不同作用与的bean依赖等 Ioc控制反转(Inversion of Control) 也被叫作DI依赖注入(Dependency Injection).在程序设计中经常使用到组合的形式,就是在一个类中使用到其他类的对象.Ioc就是用来当这个类实例化时,它里面所使用到的相关对象也会被实例化.实例化的方式有①构造器参数②方法参数③属性. Spring容器启动是通过BeanFactory或ApplicationContext读取

[学习笔记]Spring注解实现Bean

12.3  注解实现Bean定义 12.3.1  概述 前边介绍的Bean定义全是基于XML方式定义配置元数据,且在[12.2注解实现Bean依赖注入]一节中介绍了通过注解来减少配置数量,但并没有完全消除在XML配置文件中的Bean定义,因此有没有方式完全消除XML配置Bean定义呢? Spring提供通过扫描类路径中的特殊注解类来自动注册Bean定义.同注解驱动事务一样需要开启自动扫描并注册Bean定义支持,使用方式如下(resources/chapter12/ componentDefini

Spring IOC 概述

Spring IOC 概述 IOC(Inversion of Control) 控制反转,也叫 DI(D_ependency injection_) 依赖注入.是一种设计思想.不过我并不同意所谓反转的说法,因为没有谁规定什么方式就是“标准”的,如果我把IOC作为“标准”,IOC就是“标准”自身,何来反转?不过我行文也是沿用官方的说法,使用IOC描述这个技术 IOC其实是一种组装的思想,最简单理解 IOC 的方法,就是我们的组装电脑. 主板,硬盘,显卡,CPU厂商们先定义好一个个插口. 然后主板厂

spring IOC源码分析(1)

1.何谓Spring IOC 何谓Spring IOC?书上谓之“依赖注入”,那何谓“依赖注入”? 作为一个Java程序猿,应该遇到过这样的问题,当你在代码中需要使用某个类提供的功能时,你首先需要new一个对象,给它传递必要的参数,然后才能使用它提供的功能,最后释放对象占用的内存,当然了这个在Java不需要你自己去干了.这也就是说你需要自己去管理变量的整个生命周期,这在大型项目中是很糟糕的.现在好了,有了Spring IOC,这些事情都不需要你去做,你只需要告诉Spring你需要的变量实例,配置