春の理解
春とは
春の定義
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}