spring
2015-11-27 13:24
603 查看
1.obtainFreshBeanFactory
refreshBeanFactory:会去创建beanfactory,调用createBeanFactory.然后loadbeandefinitons去解析bean.
2.invokeBeanFactoryPostProcessors 回去beandefinitionreg查找BeanFactoryPostProcessors,然后执行
实例化bean的过程:调用getbean,会先查找它的依赖,先实例化依赖,然后根据实例化策略去实例化bean,用beanwrapper类
去包装还未初始化属性的object,根据byname/bytype去初始化属性
doGetBean:
1.transformedBeanName 取得真正的beanname,比如在xml配置的时候,可以用@beanname,取出factory.
2.调用getSingleton(beanName)返回null
3.如果当前factory没有beanname的定义,且父工厂不为空,调用父工厂的getbean,否则进入4
4.标记markBeanAsCreated,说明至少被dogetbean调用一次。
5.getMergedLocalBeanDefinition,整合一下bd为mbd.
6.检查bean的dependon,这个在xml配置depend-on,若有,则需要先实例化depend-on的bean,回去注册bean的depend关系,双向map.
7.再次调用getSingleton(beanname, factory)去创建实例,会调用factory的createBean
。(这里以单例为例子)
doCreateBean,这个第一次的doCreateBean参数不同
1.调用createBeanInstance去实例化bean,这里不会设置参数,根据策略调用construct,可以自定义的construct.
2.addSingletonFactory(beanName, factory)
3.调用populateBean设置属性,然后调用initializeBean去调用initmethod等后继方法。
在populatebean中,会调用识别resource等注解的处理类,他们回去处理注解。
http://www.iflym.com/index.php/code/201208280001.html http://www.iflym.com/index.php/code/201211070001.html
refreshBeanFactory:会去创建beanfactory,调用createBeanFactory.然后loadbeandefinitons去解析bean.
2.invokeBeanFactoryPostProcessors 回去beandefinitionreg查找BeanFactoryPostProcessors,然后执行
实例化bean的过程:调用getbean,会先查找它的依赖,先实例化依赖,然后根据实例化策略去实例化bean,用beanwrapper类
去包装还未初始化属性的object,根据byname/bytype去初始化属性
doGetBean:
1.transformedBeanName 取得真正的beanname,比如在xml配置的时候,可以用@beanname,取出factory.
2.调用getSingleton(beanName)返回null
3.如果当前factory没有beanname的定义,且父工厂不为空,调用父工厂的getbean,否则进入4
4.标记markBeanAsCreated,说明至少被dogetbean调用一次。
5.getMergedLocalBeanDefinition,整合一下bd为mbd.
6.检查bean的dependon,这个在xml配置depend-on,若有,则需要先实例化depend-on的bean,回去注册bean的depend关系,双向map.
7.再次调用getSingleton(beanname, factory)去创建实例,会调用factory的createBean
。(这里以单例为例子)
protected Object getSingleton(String beanName, boolean allowEarlyReference) { //第一次回返回null Object singletonObject = this.singletonObjects.get(beanName); if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) { synchronized (this.singletonObjects) { //第一次返回Null singletonObject = this.earlySingletonObjects.get(beanName); if (singletonObject == null && allowEarlyReference) { //第一次返回null ObjectFactory singletonFactory = this.singletonFactories.get(beanName); if (singletonFactory != null) { singletonObject = singletonFactory.getObject(); this.earlySingletonObjects.put(beanName, singletonObject); this.singletonFactories.remove(beanName); } } } } return (singletonObject != NULL_OBJECT ? singletonObject : null); }
doCreateBean,这个第一次的doCreateBean参数不同
1.调用createBeanInstance去实例化bean,这里不会设置参数,根据策略调用construct,可以自定义的construct.
2.addSingletonFactory(beanName, factory)
3.调用populateBean设置属性,然后调用initializeBean去调用initmethod等后继方法。
在populatebean中,会调用识别resource等注解的处理类,他们回去处理注解。
http://www.iflym.com/index.php/code/201208280001.html http://www.iflym.com/index.php/code/201211070001.html
相关文章推荐
- Maven构建一个多模块的Spring Boot + Spring MVC项目,完全基于java config
- Eclipse - Color Theme plugin
- 【java基础】关于JNDI and EJB
- 正则表达式的处理
- eclipse常用快捷键
- 菜鸟学Java----单例模式
- java获取路径
- Java自带工具jstack故障分析的一个案例
- Spring Boot自动配置源码
- java.lang.NoClassDefFoundError: javax/mail/Address解决方法
- Java编写掷骰子游戏
- 关于Java JDK中 URLDecoder.decode 方法
- 关于Android工程从eclipse迁移至android studio的过程
- java中的数学计算函数
- Java中回调函数个人理解
- java实现走迷宫算法
- LeetCode 172 : Factorial Trailing Zeroes (Java)
- Java NIO (九) ServerSocketChannel
- java处理数字格式的几种方式
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)