createBean

createBean()

  1. 获取bean对象的class对象

  2. prepareMethodOverrides lookup-method replace-method

  3. resolveBeforeInstantitation 给beanPostProcessor一个机会返回当前的bean代理对象(如果包含aop的相关处理,那么会在此处生成advisor对象,方便后续进行调用)

  4. doCreateBean 实际创建的方法

  5. 创建当前bean的包装对象,默认为空BeanWrapper

  6. 是否为空
    是: createBeanInstance bean 反射
    1、获取当前bean的class对象
    2、验证访问修饰符 否:抛异常
    3、是 :验证bd中是否包含supplier 是:obtainFromSupplier通过supplier创建对象并且直接返回
    4、否:是否包含factorymethod 是:通过factorymethod来生成具体的对象并且返回
    5、否:获取当前bean的构造方法来生成具体的对象
    1、使用自动注入的构造器来注入
    2、使用默认的构造器来生成
    6、通过BeanPostProcessor 或者选择最合适的构造器。autowireConstructor 通过此方式来生成对象并且返回
    7、instantiateBean 使用默认的方式来进行实例化操作
    8、获取默认的构造方法来进行实例化操作 ctor.newInstance
    9、添加bean对象到当前包装类中,并且进行包装类的初始化操作;

  7. applyMergeBeanDefinitionPostProcessor
    autowireAnnotationBeanPostProcessor 解析注解@Autowired @Value
    commonAnnotationBeanPostProcessor InitDestroyAnnotationBeanPostProcessor 解析注解@PostConstruct @PreDestroy @Resource

  8. 当前bean是否是单例对象,是否可以被循环引用,是否是正在被创建过程中
    同时满足:addSingletonFactory 向三级缓存中添加beanName 和lambda表达式
    不满足:9

  9. populateBean 完成属性的填充工作
    1、再填充属性过程中会涉及到循环依赖的问题

  10. initializedBean 完成当前bean的初始化操作

  11. invokeAwareMethods调用aware接口相关的方法设置容器属性
    1、BeanNameAware
    2、BeanClassAware
    3、BeanFactoryAware

  12. 如果mbd不为空且Synthetic不为true

  13. 是 applyBeanPostProcesorsBeforeInitialization循环调用BeanPostProcessor来完成before方法的调用
    1、applicationContextAwareProcessor 完成其他aware接口子类的设置工作
    1、applicationContext
    2、environmentAware
    3、ResourceLoaderAware
    4、EmbeddedValueResolverAware
    5、ApplicationEventPublisherAware
    6、MessageSourceAware

  14. invokeInitMethod执行初始化方法
    1、是否实现了initializingBean接口
    1、是:直接调用afterPropertiesSet方法来设置属性
    2、mbd不等于空且包含initMethod
    1、是调用init-method来执行

  15. applyBeanPostrocessorsAfterInitialication循环调用BeanPostProcessor来完成after方法调用
    1、会生成具体对象的代理对象->aop-》调用jdk或者是cglib的方式来生成代理对象

  16. 生成完整的对象进行返回操作

  17. registerDisposableBeanNecessary 回调 设置需要销毁的对象

  18. addSingleton 将生成的完整对象设置到一级缓存中,方便后续获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值