美文网首页spring
用40个类手写spring ioc和aop

用40个类手写spring ioc和aop

作者: 起个名忒难 | 来源:发表于2020-08-07 23:33 被阅读0次

开篇先上一张,工程图片:


image.png

这篇文章已经拖了好久了,刚好最近有点时间,终于开搞了。spring 的ioc 和aop作为spring的重要功能,相信大家都已经很熟悉了。
下面再简单的介绍一下:

IOC : 全称 Inversion of control , 翻译为控制反转,还有一个别名di (Dependency injection) 即依赖注入。 由容器来负责对象的生命周期和对象之间的关系,在没有spring之前,对象的创建和注入都是都开发人员保证的,有了ioc 之后, 都交由容器来操作。

AOP: Aspect Oriented programming 面向切面编程,在程序开发中用来解决一些系统层面的问题,比如 日志 事物 权限等。 降低代码的侵入性,执行一些与业务无关的逻辑。

接下来用张图来看下,spring ioc 的运行原理图:

spring ioc.jpg

整个流程,大致分为如下的几部:

  • 资源定位: spring会解析项目中的xml,注解,java,自动装配的配置信息,使用ClassLoader 加载到内存中,为解析做准备
  • 配置元信息的解析:spring会解析这些配置文件,并存放到容器中,使用Map进行保存,配置的元信息被解析为BeanDefinition类
  • 创建Bean的实例 : spring根据解析到的BeanNames , 采用循环遍历的方式,进行bean的创建操作,创建步骤分为了三部分,bean的实例化(依据扫描到的Class信息进行创建),Bean的初始化完成属性的注入,
  • 执行BeanPostProcessor后置处理器,执行 postProcessBeforInstantiation()方法和PostProcessAfterInstantiation()方法,切面中方法的织入也是在该步骤中执行的,下面会进行介绍

spring aop 实现

spring aop .jpg

切面类的织入是在初始化完成之后,执行BeanProcessor的时候,完成的。具体的流程参考图片,此处就不再赘述了。

下面看下spring的高级特性:

1.获取Spring IOC 容器(Aware)

通过ApplicationContextAware实现,在bean实例化后,经过Aware扫描时,发现实现了ApplicationContextAware接口,就会调用setApplicationContext方法注入applicationcontext对象,这也是非常经典的一种获取上下文的方法。

2.动态注册Bean信息(BeanDefinitionRegistryPostProcessor)

通过实现BeanDefinitionRegistryPostProcessor接口完成bean的动态注入, 动态注入Bean非常的简单,获取到当前容器后,然后调用registerBeanDefinition既可。

3.动态修改bean信息(BeanFactoryPostProcessor)

4.自定义工厂bean实例化 (AbstractFacotryBean)

5.通过Spring事件机制完成服务启动后的信息整理(ApplicationListener)

6.服务启动完成后初始化任务(CommandLineRuner)

最后的最后,上我手写的源码地址:https://github.com/topyuluo/spring-project

尽量保留了spring的设计原理和思想,希望对理解源码有帮助。

相关文章

  • 阿里现役Spring源码手册,从手写实现到深度剖析

    包含Spring概述、核心思想、手写实现IOC和AOP、Spring I0C应用、Spring IOC源码深度剖析...

  • 用40个类手写spring ioc和aop

    开篇先上一张,工程图片: 这篇文章已经拖了好久了,刚好最近有点时间,终于开搞了。spring 的ioc 和aop作...

  • spring

    Spring 01 Spring 02 Spring 03 概念 IoC容器 类之间关系 Spring aop注解...

  • Spring 学习

    Spring 01 Spring 02 Spring 03 概念 IoC容器 类之间关系 Spring aop注解...

  • Spring中的两大核心(Spring是一个IOC和AOP容器框架) IOC与aop IOC(spring的核心思...

  • Spring -- 手写 IOC 和 AOP

    一、银行转账案例 先使用原始 servlet 方式模拟一个银行转账的功能,关键代码如下: TransferServ...

  • Spring高级源码笔记:Spring中三种AOP配置方法代码实

    一、 Spring中AOP的配置方式 在Spring的AOP配置中,也和IoC配置一样,支持3类配置方式。 第一类...

  • Spring AOP实战和源码解析

    Spring AOP简介 说起Spring框架,我们最先想到的就是IOC和AOP了,如果说IOC是Spring的核...

  • spring

    1. Spring是一个轻量级的IoC和AOP容器框架。 Spring的AOP理解:@Aspect指定一个类为切面...

  • 理解springAop的正确姿势

    Spring有两大核心,IOC和AOP。IOC在spring项目中基本无处不在,而AOP则用的基本比较少。 AOP...

网友评论

    本文标题:用40个类手写spring ioc和aop

    本文链接:https://www.haomeiwen.com/subject/yzbgrktx.html