spring原理

springioc原理

在这里插入图片描述

调用refresh()里面的13个方法

  public void refresh() throws BeansException, IllegalStateException {
		synchronized (this.startupShutdownMonitor) {
			// 1.调用容器准备刷新的方法,获取当前时间和同步标识
            prepareRefresh();

            // 2.调用子类的refreshBeanFactory()方法,Bean定义资源文件的载入从这里启动
            ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
           //详解:通过XmlBeanDefinitionReader读取配置文件,然后我们可以看到beanfinitionMap
           //和beanfinitName里面有关于我们注入的bean的属性
     
            // 3.为beanFactory配置事件处理器、类加载器等,其实就是对我们的bean工厂属性填充
            prepareBeanFactory(beanFactory);

            try {
                // 4.为容器的某些子类指定特殊的Post事件处理器,我们可以实现他的接口,
                //修改一些属性,例如:是否单例,属性值啊
                postProcessBeanFactory(beanFactory);

                // 5.调用所有注册的BeanFactoryPostProcesser的Bean
                invokeBeanFactoryPostProcessors(beanFactory);

                // 6.为BeanFactory注册Post事件处理器
                registerBeanPostProcessors(beanFactory);

                // 7.国际化初始化
                initMessageSource();

                // 8.初始化事件传播器
                initApplicationEventMulticaster();

                // 9.调用子类某些特殊的Bean初始化方法
                onRefresh();

                // 10.为上面的事件传播器注册事件监听器
                registerListeners();

                // 11.初始化所有单例Bean(创建bean重要方法)
                finishBeanFactoryInitialization(beanFactory);
                //详解:调用preInstantiateSingletons方法里有个getbean()
                //  1. 实例化bean: 调用dogetbean-->createBean()-->docreatebean-->
                // docreatebeanInstance-->instantiatebean-->这里面的这个方法无
                //参构造器完成实例化bean
// beanInstance = getInstantiationStrategy().instantiate(mbd, beanName, parent);
                //  2.属性填充:  在docreateBean()里面的population方法
                //  3.initializeBean 初始化bean: 判断是否实体类有实现Aware接口
                //如果有的话,对这些类进行属性填充
                //  applyBeanPostProcessorsBeforeInitialization前置处理器
                //判断用户是否自定义init-method方法
                //applyBeanPostProcessorsAfterInitialization后置处理器
                //这里实现了beanpostprocessors类,拿到需要代理的bean通过这个类
                //可以实现动态代理AOP
                // 12.完成初始化
                finishRefresh();
            }

            catch (BeansException ex) {
                // 销毁已创建的Bean
                destroyBeans();

                // 取消刷新并重置标识
                cancelRefresh(ex);

                // Propagate exception to caller.
                throw ex;
            }
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值