bean的创建
2020-09-10 14:46:14 0 举报
bean的创建
作者其他创作
大纲/内容
YES
根据名称注入
执行用户自定义的init-method方法
对特俗bean的处理:Aware、BeanClassLoaderAware、BeanFactoryAware
对所有需要依赖检查的属性进行后处理器处理,即再一次更新pvs(propertyValues)
注册一些bean的销毁方法
没有参数的话,直接调用实例化策略进行实例化,最简单的方式就是使用反射,但是如果用户定义了replace或者lookup方法,则采用cglib动态代理
对bean进行填充,将各个属性值注入,其中,可能存在依赖于其他bean的属性,则会递归初始依赖bean
autowireNecessary==false
执行BeanPostProcessors以能够有可能返回proxy对象而不是bean instance
根据类型注入
应用后处理器的前置应用处理方法
return
对应的构造函数是否解析过
根据参数解析构造函数
调用某些初始化方法,如afterPropertySet以及init-method;同时也在这些方法前后执行了某些BeanPostProcessors
NO
bean此时已经实例化并且也进行了属性的填充
曝光条件:单例&允许循环依赖&当前bean正在创建,为了避免后期循环依赖,可以在bean属性填充前将创建实例的ObjectFactory加入工厂
一个类由多个构造函数,每个构造函数都有不同的参数,所以调用前需要根据参数锁定构造函数或对应的工厂方法;解析构造函数比较消耗性能,因此采用缓存机制;如果已经解析过了则使用解析好的构造函数方法,无需再次锁定
执行用户自定义的初始化方法
给InstantiationAwareBeanPostProcessors最后一次机会在属性设置前来改变bean,如:可以用来支持属性注入的类型
参数是否为空
允许PostProcessors合并父子beanDefinition
返回为NULL
使用工厂方法创建bean
i((InitializingBean) bean).afterPropertiesSet()
instanceSupplier非空
先从缓存中取构造函数参数类型,并将参配置数类型转为构造参数类型;如果缓存中没有,就进行构造函数参数解析,选择构造函数的方式主要是将构造函数按照参数数量进行排序,使用参数个数去遍历,终止条件为找到对应的构造函数或者构造函数参数个数小于需要的参数个数
符合曝光条件
应用后处理器的后置应用处理方法
工厂方法非空
提取出的依赖bean存入pvs
根据指定bean使用对应策略创建实例:工厂方法、构造函数自动注入、简单初始化
将属性应用到bean中,该方法是应用了属性转换器转换对应的属性类型
0 条评论
回复 删除
下一页