jvm和spring容器的关系

admin|
38



文章目录

  • 前言
  • 叙述
  • 宝图
  • spring是什么
  • 四个关键策略
  • IOC/DI
  • AOP
  • 总结


  最近在和小伙伴们讨论spring的内容,今天小咸儿特来总结一波~


  先来看看spring各个模块之间的关系

jvm和spring容器的关系_IOC


  既然看到了spring的各个模块关系图,那么我们就先来介绍一下spring的两大模块。

spring是什么

Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一栈式) 轻量级开源框架。

或者简单说来就是一切从bean开始。

四个关键策略

  • 1、基于POJO的轻量级和最小侵入性编程;
  • 2、通过依赖注入和面向接口松耦合;
  • 3、基于切面和惯性进行声明式编程;
  • 4、通过切面和模板减少样板式代码;

IOC/DI

  IOC:控制反转,也就是说将需要实现的对象创建、依赖的代码交给spring去实现。

  DI:去赋值,维护好对象与对象之间的关系。

  • spring-beans和spring-core是核心模块,包含控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)。
  • spring-context模块构架于核心模块之上,扩展了BeanFactory,为她添加了Bean生命周期控制、框架事件体系以及资源加载透明化
  • spring-expression模块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。

AOP

  AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码。Spring AOP使用纯java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码。

纵向继承:

jvm和spring容器的关系_Java_02


横向抽取:

jvm和spring容器的关系_jvm和spring容器的关系_03


jvm和spring容器的关系_IOC_04


实现原理:

  • AOP底层采用代理机制进行实现。
  • 接口 + 实现类:spring采用JDK的动态代理 Proxy。
  • 实现类:spring采用cglib字节码增强。

由spring-aspects和spring-instrument和spring-aop三个模块组成。

  • spring-aop是spring的另一个核心模块,是AOP主要的实现模块,以JVM的动态代理技术为基础,设计出了一系列的AOP横切实现,比如前置通知、返回通知、异常通知等。
  • spring-aspects模块集成自AspectJ框架,主要是为spring AOP提供多种AOP实现方法。
  • spring-instrument模块是基于Java SE中的“java.lang.instrument”进行设计的,应该算是AOP的一个支援模块,主要作用是JVM启动时,生成一个代理类。

  有关更多spring的内容分享,还请见小咸儿的博客内容。

感谢您的阅读~~