您的位置:首页 > 编程语言 > Java开发

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的策略,这些我们都可以用到以后的项目过程中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: