IOC是核心
IOC 容器加载过程【重要】:所有模块都依赖IOC,aop,循环依赖都依赖IOC
IOC控制反转,控制理念,来解决层与层之间的耦合。DI注入实现
怎么讲Bean交给IOC容器来管理
配置类xml,注解
加载spring上下文
将类注入到IOC容器当中
当一个类生产Bean最核心一个接口是什么?
BeanFactory:spring的顶层核心接口,负责使用简单工厂模式,生产Bean
BeanDefinition【是一个容器,beandefinitionMap】:spring的顶层核心接口,封装了生产Bean的一切原料
BeanDefinition是由BeanDefinitionRegistry【设计师】一个一个往BeanDefinitionMap往里面放--------注册Bean定义
BeanDefinitionReader用来读取配置文件或者配置注解
以上三个类可以比喻成::::::::::::::::::::::::::销售、推广、设计师
比如BeanDefinitionScanner扫描到100个类,但是只有部分类上有@Component注解,这是需要BeanDefinitionReader进行扫描,再得到BeanDefinition后需要BeanDefinitionRegtry进行注入到BeanDefinitionMap中。为后面是有准备。。。。。。
AppliacationContext与BeanFactory的区别
AppliacationContext实现了国际化、实现了事件、等其他接口扫描器读取器,实现了很多东西,服务类,更好的沟通
BeanFactory:只有一个职责:就是生产Bean
IOC加载过程:::::::::::::::::::::::::::::::::::::::::::::::::::::
1,BeanDefinitionReader读取xmlApplicationContext/@ApplicationContext
2,BeanDefinitionScanner扫描有@Component注解的类
3,BeanDefinitionRegtry将BeanDefinition注入到BeanDefinitionMap中
4,BeanDefinition交给BeanFactory用来生产Bean
5,得到Bean
=======================================================================================================
IOC总结:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- 类------->Bean
- 加载Bean定义【读取、扫描、注册】
- Application调用后置处理器BeanFactoryPostProcessor进行修改,BeanFactoryRegistryPostProcessor进行注册Bean定义
- BeanFactory调用getBean();
非常重要的两个扩展节点:::::::是在ApplicationContext里面完成的
BeanDefinitionPostProcess后置初期器,用来修改BeanDefinition
BeanDefinitionRegistryPostProcess:用来注册,添加图纸
Bean的生命周期
实例化【反射】
填充属性
@Autowire @Value
初始化-------------------------------------------调用:Put()--------------------------------->Map<key,alue>其中key为Bean的名字,Value为Bean的实例
initmethod destory
初始化时会看又没事类实现Aware接口,实现了就会调用各种Aware方法