【无标题】

Spring 复习

IOC

IOC:

即“控制反转”,是一种设计思想,将创建的对象交由Spring容器管理的生命周期,降低代码耦合性。

IOC主要实现方式:

主要使用依赖注入,Spring中的依赖注入方式有:构造方法注入、setter注入、接口注入。

目的:

帮助我们解耦各种有依赖关系的业务对象之间的绑定关系。

IOC -Provider

虽然不需要我们⾃⼰来做绑定关系,但是这部分的⼯作还是需要有⼈来实现的,所以IoC Provider就担任了这个角色,同时IOC Provider的职责也不仅仅这些,其基础职责如下:

1.业务对象的构建管理

IOC中,业务对象不需要关心所依赖的对象如何构建获取,这部分任务由IOC Provider。

2.业务对象之间的依赖绑定

通过结合之前构建和管理的所有业务对象,以及各个业务对象之间可识别的依赖关系,将这些对象所依赖的对象注⼊绑定。从⽽保证每个业务对象在使⽤的时候,可以出狱就绪状态。

SpringIOC容器

担任了IoC Provider的职责,同时在此基础上,还增加了对Bean⽣命周期的管理、AOP⽀持内容。
从整体来看Spring的IoC容器的作⽤,共分为两部分:

1、容器启动阶段:

以某种⽅式将配置的Bean信息(XML、注解、Java编码)加载如整个Spring应⽤。

2、Bean实例化阶段:

将加载的Bean配置信息组装成应⽤需要的业务对象在此基础上,还充分运⽤了这两个阶段不同的特点,都预留了拓展钩⼦,供我们根据业务场景进⾏⾃定义拓展。

2、一些核心的接口、类:
1. Resource:

⽤于解决 IoC 容器中的内容从哪⾥来的问题,也就是 配置⽂件从哪⾥读取、配置⽂件如何读取 的问题

2. BeanDefinition:

⽤于解决 Bean 的具体定义问题,包括 Bean 的名字是什么、它的类型是什么,它的属性赋予了哪些值或者引⽤,也就是 如何在 IoC 容器中定义⼀个 Bean,使得 IoC 容器可以根据这个定义来⽣成实例的问题。

3. BeanFactoy:

⽤于解决 IoC 容器在 已经获取 Bean 的定义的情况下,如何装配、获取 Bean 实例 的问题。

4. ApplcationContext:

对上述的内容进⾏了功能的封装,解决 根据地址获取 IoC 容器并使⽤ 的问题。

从Bean的⻆度来看,其整个生命周期如下:

在这里插入图片描述
Spring只帮我们管理单例Bean的⽣命周期,对于prototype类型的bean,Spring在创建好交给使⽤者使⽤之后,就不在管理其后续的⽣命周期了。

大致整体流程:
  1. BeanDefinitionReader读取Bean的配置信息(XML等),将读取到的每个Bean的配置信息使⽤
    BeanDefinition表示,同时注册到相应的BeanDefinitionRegistry(⼀个map)中 。
  2. 通过实现了BeanFactoryPostProcessor的类,⾃定义修改BeanDefinition中的信息(如果有的话)
  3. Bean的实例化:
    (1) 采⽤策略化bean的实例, 两种⽅式:cglib、反射
    (2) 获取Bean的实例之后,根据BeanDefinition中信息,填充Bean的属性、依赖
  4. 检测各种Aware接⼝,BeanFactory的、ApplicationContext的等
  5. 调⽤BeanPostProcessor接⼝的前置处理⽅法,处理符合要求的Bean实例
  6. 如果实现了InitializingBean接⼝,执⾏对应的afterPropertiesSet()⽅法
  7. 如果定义了init-method,执⾏对应的⾃定义初始化⽅法
  8. 调⽤BeanPostProcessor接⼝的前置处理⽅法,处理符合要求的Bean实例
  9. 使⽤
  10. 判断Bean的Scope,如果是prototype类型,不再管理
  11. 如果是单例类型,如果实现了DisposableBean接⼝,执⾏对应的destoy⽅法
  12. 如果定义了destory-method,执⾏对应的⾃定义销毁⽅法
扩展:

1、BeanFactoryPostProcess
Spring提供的容器扩展机制,允许我们在bean实例化之前修改bean的定义信息即BeanDefinition的信息
2、BeanPostProcessor
也是Spring提供的容器扩展机制,不同于BeanFactoryPostProcessor的是,BeanPostProcessor在bean实例化后
修改bean或替换bean。BeanPostProcessor是后⾯实现AOP的关键。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值