源码入口
-
getBean 我们用最常用的根据bean 的名称 从ioc容器中获取bean 做为入口
-
实现这个接口方法的类是AbstractBeanFactory 其中getBean方法调用了doGetBean 真正从IOC容器中获取被管理的Bean
-
调用了本类的doGetBean方法去获取Bean 并且实现依赖注入 其中最为重要的方法是createBean此方法 创建指定Bean的实例
-
点击createBean方法进入到AbstractAutowireCapableBeanFactory类中 该类中实现了createBean方法来创建实例对象 而这个方法真正创建Bean方法是doCreateBean
-
doCreateBean 方法 最为重要的两个方法为:createBeanInstance 创建bean的实例 ,另外一个方法是:populateBean 封装创建的实例对象 并且赋值Bean 定义配置的属性给实例对象。
-
首先来看createBeanInstance方法 此方法是当前类的方法 这个方法主要的内容是 查看当前的bean是否可实例化 然后去进行实例化 最主要的实例化方法instantiateBean
-
改方法是在当前类中 主要是去将实例化Bean对象 其中getInstantiationStrategy().instantiate 是把实例化对象封装起来
-
instantiate方法是在SimpleInstantiationStrategy类中 这个方法 其中会有两种方式来实例化对象:BeanUtils.instantiateClass使用BeanUtils实例化,通过反射调用 newInstance()来实例化。 另外一种是通过instantiateWithMethodInjection 这个方法是通过 使用CGLIB来实例化对象
-
populateBean此方法封装Bean实例 并且注入Bean中设置Bean中的属性值 这个方法主要是内容是:① 获取容易在解析bean定义资源时候的BeanDefiniton中设置的属性, ②:对属性进行注入 applyPropertyValues
-
applyPropertyValues 设置实例化对象属性值 其中最主要的方法是 setPropertyValue
-
总体流程: 开始实例化——>选择实例化策略——>执行实例化——>准备依赖——>解析注入规则——>注入赋值