上一篇的Spring源码阅读笔记(1)简单讲解了IOC容器的初始化过程,接下来讲解IOC容器的依赖注入。
依赖注入一般发生在应用第一次通过getBean()向容器索取Bean的时候,但也可以在BeanDefinition中控制lazy-init属性实现Bean的预实例化,即完成依赖注入的过程,在初始化时完成。
1.IOC容器依赖注入Bean实例化过程
从org.springframework.beans.factory.support.AbstractBeanFactory.getBean(String)
开始
doGetBean(name, null, null, false) =>
createBean(beanName, mbd, args) =>
doCreateBean(beanName, mbdToUse, args) =>
createBeanInstance(beanName, mbd, args) =>
instantiateBean(beanName, mbd) =>
getInstantiationStrategy().instantiate(mbd, beanName, parent) =>
BeanUtils.instantiateClass(constructorToUse) 或者instantiateWithMethodInjection(bd, beanName, owner) =>
=>
Bean实例化的方式:
- 使用工厂方法实例化
instantiateUsingFactoryMethod(beanName, mbd, args)
- 使用容器的autowire特性,调用构造方法实例化
- 使用默认的构造方法实例化
- hehehe
- xixi
- de
- xixi
使用了CGLIB
库生成java的字节码