| 失效链接处理 | 
| springAOP核心组件分析  PDF 下载 
	本站整理下载: 
	相关截图:  
	主要内容: 
		进入AbstractApplicationContext类 
		841行 finishBeanFactoryInitialization() 
		857行:String[] weaverAwareNames//与AspectJ weaver相关的, 
		可以不关注 
		在869行,开始操作,初始化剩下的单实例bean,完成剩余bean的创 
		建,beanFactory.preInstantiateSingletons(),点进此方法 
		进入DefaultListableBeanFactory类, 
		734行:获取容器中所有的bean名,并遍历获取容器中所有的bean名,依 
		次进行初始化和创建对象(第一个bean跟我们关系不大),但我们可以看 
		看创建流程 
		738行:拿到bean的定义信息 
		739行:bean不是抽象, 是单实例, 不是懒加载 
		 如果满足这3条件,可以实例化bean 
		740行:工厂模式,是否实现FactoryBean接口的bean,如果是的话就会 
		调用FactoryBean的getObject来获取bean 
		755行 getBean(..),此方法为生成单实例bean的主要方法, 跟进此方 
		法,见右箭头 
		766行:所有bean都创建完后,触发初始化后置处理器的回调方法,其实 
		就是把所有的bean对象遍历,检查所有的Bean是否是 
		SmartInitializingSingleton接口的,如果是就执行 
		afterSingletonsInstantiated(); 
		进入AbstractBeanFactory类, 
		198行:public Object getBean(String name){ 
		return doGetBean(...); }//此处的getBean与测试用例anno.getBean()是同一个 
		继续跟进此方法,进入下面239行 
		239行进入此方法 
		246行:Object sharedInstance = getSingleton(beanName);第一 
		次获取先检查单实例的缓存中是不是存在此bean; 
		247行:if(sharedInstall != null)//缓存中有,就直接拿 
		269行:spring是否存在父子容器,直接跳过,没有父子工厂关系 
		287:markBeanAsCreated(beanName)//标记当前bean已被创建了,防 
		止在多线程情况下,两个线程同时来创建一个bean,那就不是单实例了 
		291行:RootBeanDfinition mbd //获取bean定义信息 
		295行:String[] dependsOn//获取当前bean依赖的其它bean,如果有 
		依赖的bean,就先把依赖的bean先创建出来,见304行 
		314行:if (mbd.isSingleton())//如果bean是单实例的 
		315行:lambda,传一个beanName进行创建bean 
		317行:若不能获取才到创建,return createBean(beanName; 
		spring就是利用这个机制,保证单实例bean的唯一, 点击跟进 
		createBean方法 | 



 
     苏公网安备 32061202001004号
苏公网安备 32061202001004号


 
    