Spring框架是一个严格的分层的架构组织起来的框架,所有的其他模块都是依赖于核心的core模块构建的,这些模块组成了成个企业级开发的所有组建,可以选择性的依赖需要的模块即可,不需要依赖多余的模块,这样模块化的集成避免很多不必要的维护和后期迭代的问题。整个Spring框架的结构图如下,下面分别介绍一下各个模块的功能。

Core模块:构建应用的核心,主要提供了依赖注入的特性,其中一个最抽象的接口为BeanFactory,实现该结构的具体类可以通过读取一些bean的元数据例如xml文件和注解的形式配置加载到容器进行管理。
Aop模块:提供了切面编程的支持,它主要能够做到方法级别的动态代理,在编译阶段它是跳过的,是在运行时进行修改字节码或则动态实现代理类进行代理,它也使事务的管理变得简单,让事务的控制与业务代码隔离。
Dao模块:能够管理对于数据库的操作,打开连接池与释放连接池,也支持了声明事务与编程式事务。
ORM模块:提供流程的框架的ORM框架的组建.
J2EE模块:提供一些流程的J2EE组建,例如JDBC, JMX.
Web模块:提供对于常见mvc框架的支持,例如Struts和JSF。


核心的依赖关系是 core包为最基础的模块,beans包依赖core模块.aop又依赖于core和beans模块. context是一个独立的模块依赖于context-expression模块。context-support模块依赖于beans,context,core模块。tx模块依赖于beans与core, jdbc又依赖于tx.
我们首先来分析下core包和beans包:

asm和cglib包是spring对于字节码的支持,它能够更加灵活的和反射结合去修改字节码修改的东西,例如spring的aop动态代理就有基于cglib的动态字节码修改的方式,asm包为其提供技术支持。

  • core包提供一些核心的类与一些基本类抽象行为的接口。例如AliasRegistry为bean名称的定义抽象接口,AttributeAccessor为bean的元数据访问抽象接口。Ordered为一些复合操作的顺序抽象。包含了jvm一些spring的扩展.
  • beans包是spring容器核心的一些组件。例如所有容器的抽象BeanFactory,它抽象了容器的基本功能,基于它有一些扩展的容器功能抽象,例如ApplicationContext与ConfigurableListableBeanFactory等等,Spring自带很多容器的实现。BeanDefinitionRegistry抽象了存放bean的载体抽象,里面存放一个Map
    <”beanName,Bean”>定义抽象的数据结构。BeanDefinition就是bean对象的抽象.ResourceLoader抽象了对于配置资源加载资源的抽象,ResourcePatternResolver扩展了它并返回多个资源。完成的流程就是容器通过ResourceLoader去加载bean的元数据信息,然后并转换为BeanDefinition,最后存放在BeanDefinitionRegistry,提供给容器使用。beans包主要还是提供了容器的基本能力,并不给出具体的容器上下文实现。
  • context包给出了spring一些通用的上下文实现。ApplicationContext就是其中一个实现,它扩展了基本的容器的功能也包含了资源解析与容器时间通知与继承能力和国际化转换的能力。spring给出了默认的实现,其中主要的实现在AbstractApplicationContext当中,在整个容器加载过程中,我们有很多操作可以横切进去,干预容器的加载过程。例如BeanPostProcessor接口,就是能够在bean在装配完毕之后回调接口,还有一些Aware的接口例如ApplicationContextAware,它可以在容器起来之后对容器做一些事情,前提是这些自己扩展到的bean都被容器管理。

Spring核心包介绍相关推荐

  1. spring核心包功能解析

    转载于:https://www.cnblogs.com/gaoguofeng/p/5882977.html

  2. Spring框架Runtime介绍(导包)

    一.Spring框架Runtime介绍,如图 1.1 Test: Spring提供测试功能 1.2 Core Container:Spring核心容器,Spring启动的基本条件, 1.2.1 Bea ...

  3. spring之基本介绍以及老版本框架的下载地址

    spring之基本介绍以及老版本框架的下载地址 第一:为什么要学习spring?学习spring能为我们在工作中的日常开发带来什么好处? 首先来了解一下spring:spring是一种开源的分层的相对 ...

  4. Spring Boot开发介绍

    Spring Boot开发介绍 Spring Boot介绍 安装Spring Boot插件 创建Spring Boot项目 Idea 创建Spring Boot项目失败 解决方法1-更换为aliyun ...

  5. Vert.x学习笔记(一) Vert.x 核心包

    Vert.x是一个事件驱动的JVM上的框架,可以帮助我们构建现代.灵活.可扩展的程序.Vert.x有多种语言的版本,可以用在Java.Kotlin.Scala.Groovy.Ruby等语言上.当然现在 ...

  6. 1071svm函数 r语言_R语言机器学习之核心包e1071 - 数据分析

    R语言有很多包可以做机器学习(Machine Learning)的任务.机器学习的任务主要有有监督的学习方式和无监督的学习方式. 有监督学习:在正确结果指导下的学习方式,若是正确结果是定性的,属于分类 ...

  7. java加密与解密-核心包中的部分API(2)

    主要是介绍java安全框架的核心包中的部分API作用 java.Security包 ​ java.security包主要用于为安全框架提供类和接口 Provider类 Provider类实现了java ...

  8. JAVA_Java常用核心包(概念)

    20150802 Created By BaoXinjian 一.Java常用包 Java各种核心包 1. java.lang: java 的核心类库,包含了运行java 程序必不可少的系统类,如基本 ...

  9. 帝国cms万能通用api二次开发核心包使用说明

    简介 帝国cms万能通用api二次开发核心包是一款可以用地对帝国cms进行二次开发,可进行开发微信小程序.百度小程序.支付宝小程序.轻应用.苹果ios安卓android.其他营销插件的二次开发核心包. ...

  10. gnujaxp.jar与struts2中的xwork核心包冲突

    在做项目的时候,项目启动报了以下的错误 Caught Exception while registering Interceptor class org.apache.struts2.intercep ...

最新文章

  1. mate7刷android 6.0,华为Mate7 6.0系统刷recovery_Mate7 6.0专用第三方recovery
  2. epub java虚拟机精讲_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细!
  3. 5.6.50 mysql 用什么驱动_日均5亿查询量的京东订单中心,为什么舍弃MySQL用ES?
  4. python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib
  5. datax参数设置_DataX Web数据增量同步配置说明
  6. 微信公众号测试功能点
  7. 内连接和等值连接的区别
  8. 值得电商美工借鉴的购物APP页面设计,让人无法自拔
  9. sudo rpm安装时$USER是root
  10. Introduction to Computer Networking学习笔记(二十八):DNS
  11. ASP.NET删除服务器端文件,asp.net删除服务器上的文件
  12. 【python爬虫专项(27)】拉勾网数据采集(关键词网址不发生变化)
  13. wx.scanCode(Object object)使用详解
  14. AMD处理器与INTEL的区别
  15. 如何在VC下将mak文件导入 .
  16. 华三HCL模拟器添加虚拟网卡连接外网、VMware虚拟机、实体机方法
  17. js控制form提交
  18. 微信小程序--获取二维码(java后端)
  19. Java开发基础教学,如何让自己像打王者荣耀一样发了疯
  20. 条码软件里如何调整二维码的角度

热门文章

  1. stvd使用c语言编程,stm8编程tips(stvd)
  2. 【数据库实验一】基础操作
  3. Kconfig 和 Kbuild
  4. Python办公自动化——8行代码实现文件去重
  5. SIP协议错误代码code大全(中英文对照)
  6. matlab 平滑曲线连接_兔学 | MATLAB由离散数据点绘制曲线图像
  7. 智慧交通信号控制系统梗概
  8. ASP.net开发实践系列视频教程(总共53课) 天轰穿新的视频
  9. 应用于手机触摸屏中的电容式触摸芯片
  10. 罗技K380使用手册