spring

用40个类手写spring ioc和aop

2020-08-07  本文已影响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 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的设计原理和思想,希望对理解源码有帮助。

上一篇 下一篇

猜你喜欢

热点阅读