Spring -- IOC

IOC

Inversion of control  控制反转

1.控制什么?

控制对象的创建及销毁(生命周期)

2.反转什么?

对象的控制器被反转,对象的控制器交给IOC容器

 

注解配置IOC--声明Bean 

1.在类上增加@Component 可以被spring容器识别(@ComponentScan扫描),启动Spring后,会自动把它转为容器管理的Bean。

 

对@Component 的细分,功能一样:

 用于DAO实现类进行注解

 用于对业务层进行注解,功能与@Component 相同

用于对控制处层注解,功能与@Component 相同

 

image.png

 

示例:

image.png

 

image.png

expression 表示过来的表达式

 

实现原理:

BeanFactory

Spring基于Bean,核心类BeanFactory,管理和存储所有的bean,及bean之间的关系

ref关联对象之间的关系  

最顶层接口类,

下面关联了各个子类分别针对各个场景有各自实现 ,这是委派模式

最顶层接口BeanFactory不做具体实现

真正的实现类是:DefaultListableBeanFactory

 

最核心的方法:获取一个Bean:getBean()

ClassPathXMLApplicationContext类

 

BeanFactory 工作流程:

对BeanDefinition 的Resource定位,加载,注册三个过程;

ps:Resource是对xml,propertity的封装,BeanDefinition是对对象内容的封装

 

Bean对象在spring实现中是以BeanDefinition 来描述的,所有的类都对对应一个BeanDefinition ,

BeanDefinition 为什么存在?

装饰器模式, 注重覆盖,扩展,同宗同源,对原有对象(类)的包装,但不破坏你原有的东西,保留原有OOP关系、

BeanDefinition 相当于是保存在内存中的配置文件,保存了所有跟类属性相关的信息。

依赖注入:就是把BeanDefinition中的信息读取出来,利用反射机制,或者代理机制创建对象;

新创建中的对象不会放到IOC容器中,而是先存入另外一个cache容器

Wrapper对原生对象的包装,通过构造方法存储原始对象,放入cache的只是wrapper

减少代码侵入,能够在原生的基础之上,再进行扩展,监听器,回调函数,标记信息

 

BeanDefinitionReader主要是用来读取配置文件 xml文件解析 定位 将这些内容转换为BeanDefinition

入口: context

定位: 以Reader结尾的类  (定位资源位置)

加载:  BeanDefinition保存类信息,包括OOP关系   (加载资源内容,转换为一个BeanDefinition )

注册: Factroy、Context 就是把用户所定义的Bean放到IOC容器中(Map)(将BeanDefinition 写入容器)

真正具体干活的: do开头的方法 

 

springIOC 初始化最核心的方法:

  refresh():把所有的bean重新构造一遍

 

IOC 容器:Map<string, BeanDefinition>  beanDefinitionMap 

image.png

 

 

BeanFactory: 主语是Factory 顶层接口,bean 工厂的模型,具体的工厂会通过策略莫斯去实现,不同工厂生产不同的产品

FactoryBean :主语Bean,所有的工厂生产出的产品都要实现此接口

简言之:BeanFactory生产的产品都是FactoryBean

 

Beanfactory本身也是通过BeanFactory创建的,

所以Beanfactory本身也是一个FactoryBean

spring中所有的对象都是FactoryBean

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页