spring -bean 的创建过程
2013-07-07 13:13
239 查看
紧接上节讲的内容,这节主要是讲spring是如何实例化bean:
Country obj = (Country)factory.getBean("contry");
1、AbstractBeanFactory的doGetBean方法开始创建bean,这个方法会根据bean的类型来判断 是何种类型,然后采用不同的创建bean方法来进行,单例模式还是原型模式他们各自有不同的创建方式,我们一单例模式的bean为例,来介绍创建过程
2、单例模式会通过依赖倒转即命令模式来调用AbstractAutowireCapableBeanFactory的BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args) 方法来进行具体的对象创建,进入这个方法内部
3.首先会检查这些bean是否可以创建,如是否是public修饰的类,以及是否有类加载器resolveBeanClass(mbd, beanName);详见这个方法
4、判断该类采用什么方式创建的,是工厂模式,还是采用构造函数模式,还是采用自动注解的方式,还是采用默认构造函数进行创建,这里我们以默认构造函数为例介绍创建bean对象的方式
5、进入instantiateBean(final String beanName, final RootBeanDefinition mbd) 这个方法是采用默认构造函数方式进行对象的创建,在这里需要重点注意的是spring为我们提供了默认的两种创建bean的处理方式吗,默认的实例化策略是cglib对bean进行实例化, 其实也就是反射的方式,这里运用的是CglibSubclassingInstantiationStrategy,Spring提供了生成bean的默认类,就是这个类的父类SimpleInstantiationStrategy,这两个类是Sprting提供的两种默认的生成bean的类。
6、创建出来的类对象会封装成BeanWrapper这个对象完成了具体的依赖对象注入功能。
这里只是做了简单的介绍,详细过程由于比较繁多可以参考源码自己理解,这里主要需要注意的是spring对于不同bean类型判断的处理方式,以及不同bean对象创建方式的处理,以及对如果创建bean的策略,这些我们都可以用到以后的项目过程中。
Country obj = (Country)factory.getBean("contry");
1、AbstractBeanFactory的doGetBean方法开始创建bean,这个方法会根据bean的类型来判断 是何种类型,然后采用不同的创建bean方法来进行,单例模式还是原型模式他们各自有不同的创建方式,我们一单例模式的bean为例,来介绍创建过程
2、单例模式会通过依赖倒转即命令模式来调用AbstractAutowireCapableBeanFactory的BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args) 方法来进行具体的对象创建,进入这个方法内部
3.首先会检查这些bean是否可以创建,如是否是public修饰的类,以及是否有类加载器resolveBeanClass(mbd, beanName);详见这个方法
4、判断该类采用什么方式创建的,是工厂模式,还是采用构造函数模式,还是采用自动注解的方式,还是采用默认构造函数进行创建,这里我们以默认构造函数为例介绍创建bean对象的方式
5、进入instantiateBean(final String beanName, final RootBeanDefinition mbd) 这个方法是采用默认构造函数方式进行对象的创建,在这里需要重点注意的是spring为我们提供了默认的两种创建bean的处理方式吗,默认的实例化策略是cglib对bean进行实例化, 其实也就是反射的方式,这里运用的是CglibSubclassingInstantiationStrategy,Spring提供了生成bean的默认类,就是这个类的父类SimpleInstantiationStrategy,这两个类是Sprting提供的两种默认的生成bean的类。
6、创建出来的类对象会封装成BeanWrapper这个对象完成了具体的依赖对象注入功能。
这里只是做了简单的介绍,详细过程由于比较繁多可以参考源码自己理解,这里主要需要注意的是spring对于不同bean类型判断的处理方式,以及不同bean对象创建方式的处理,以及对如果创建bean的策略,这些我们都可以用到以后的项目过程中。
相关文章推荐
- Spring IOC 容器源码分析 - 创建单例 bean 的过程
- Spring 源码 之 配置文件中的Bean在Spring中的创建过程
- Spring4.3.x 容器中bean的创建过程(5)—— 注册bean的销毁方法
- spring的启动过程05-bean的创建过程
- 分析spring源码第五(三)篇:Spring中Bean的解析、加载、创建 过程总结
- 浅谈spring——bean创建过程(四)
- Spring 创建Bean的过程及其源码浅析
- spring bean 的创建过程
- spring——bean创建过程
- Spring4.3.x 容器中bean的创建过程(2)——实例化Bean
- 2、Spring的LocalSessionFactoryBean创建过程源码分析
- Spring4.3.x 容器中bean的创建过程(2)——实例化Bean
- Spring创建Bean的过程 【摘抄】
- [转载]Spring创建Bean的过程
- Spring创建Bean的过程
- Spring IOC容器创建bean过程浅析
- Spring4.3.x 容器中bean的创建过程(3)—— 初始化bean的属性值
- Spring4.3.x 容器中bean的创建过程(4)—— 执行bean的初始化方法
- Spring源码解析之bean的创建和销毁
- (三)Spring详解——创建bean实例