春の理解

春の理解

春とは

春の定義
	Spring是java应用广泛的框架;是一个轻量级DI/ioc和Aop容器的开源框架.Spring提倡以"最少侵入"的方式来管理应用中的代码,这意味着我们可以随时安装或卸载Spring.
Springのいくつかのコアモジュール

ばねシステム図

春は何をしますか

Spring能解决什么问题
	管理我们项目中的bean,编码过成中进行拆解,运行时进行装配,来达到解耦的目标。

BeanFacory和FactoryBean

BeanFactory :interface
	getBean(beanName):
		1.根据beanName从Ioc中获得一个实例Bean 
		2.bean为是延迟加载,getBean的时候进行初始化
		 初始化Bean
		 依赖注入
FactoryBean :interface 
	Spring提供的接口,用户可能实现这个接口,来创建自己的bean工厂.自定义Bean增强.
	getObject()

ApplicationContext

继承了DefaultListableFactory
实现了BeanFactory

AbstractApplicationContext

	refresh();//初始化bean容器

DefaultListableBeanFactory:デフォルトの実装、拡張可能

	beanDefinitionMap	

BeanDefinition:Bean構成情報を格納します

	beanClassName:类名
	lazyInit:是否延时加载
	factoryBeanName:存在工厂的name

ApplicationContextAware

	setApplicationContext()注入容器;通过解耦方式获得IOC容器的顶层设计 后面将通过一个监听器去扫描

iocの手書き(クラスで自分で作成したメモ)

1.定位配置文件
	BeanDefinitionReader : 实现读取配置文件功能
	ApplicationContext:构造函数中添加locations
	将loadBeanDefinitions 返回值List<DeanDefinition>
	Prooerties config 赋值
	doScaner(config.scanPackage);
	loadBeanDefinitions () :
		判断是否为interface:需要实现类 赋值给beanClassName(目前先进行continue)
		doCreateBeanDefinition
			1.setBeanName()
			2.setBeanFactoryName();
		
2.加载配置文件
	loadBeanDefinitions(String... locations);
3.注册bean到容器中:beanDefinitionMap(伪ioc容器)
	doRegisterBeanDefinition(beanDefinitions);
4.将非延迟加载的类提前初始化
	doAutowired() //只处理非延时加载情况
	          ||
	          \/
	      getBean();==> doCreateBean 1.初始化 insatiateBean(BeanName,BeanDefinition) 2.注入 populateBean(BeanName,BeanDefinition,BeanWrapper);
	      *为什么先初始化,在依赖注入
	      防止循环依赖,class A {private B} class B {private A}

おすすめ

転載: blog.csdn.net/Bruce_Zhang0828/article/details/96380003