spring中大约包含20过个模块, 主要包括以下几部分:

1. Core Container

Core Container(核心容器)包含Core,Beans,Context和Expression Language模块

Core和Beans是spring的基础部分,提供IOC和依赖注入的特性, 基础概念是BeanFactory, 它提供对Factory模式的经典实现来消除对程序性单列模式的需求,并使得可以程序从逻辑中分离出依赖关系和配置.

Core: 主要包含spring框架基本的核心工具类, core模块是其他组件的基本核心.

Beans: beans模块是所有应用都要用到的, 它包含访问配置文件,创建和管理bean以及进行IOC/DI操作相关的所有类.

Context: 在core和bean的基础上, 提供了一种类似于JNDI(Java命名和目录接口,所有与系统外部的资源的引用,都可以通过JNDI定义和引用https://www.cnblogs.com/shawnblogs/p/5279733.html), Context继承了Beans的特性,为spring核心提供了大量的扩展,添加了国家化,时间传播,资源加载和EJB以及JMX的支持, 其中ApplicationContext接口是Context的核心.

Expression Language: 是jsp规范中定义的unifed expression language的一个扩展, 用于在运行时查询和操作对象, 支持设置/获取属性的值, 属性的分配, 方法的调用,访问数组上下文等操作.

2.Data Access/Integration

JDBC: 提供一个JDBC抽象层,消除冗长的JDBC编码和解析数据库厂商特有的错误代码, 包含了对jdbc数据库访问进行封装的所有类

ORM: 对象-关系映射API, 如JPA, JDO, Hibernate, Mybatis等, 提供了一个交互层, 利用ORM进行封装, 可以混合使用所有Spring提供的特性进行O/R映射.

JMS: 主要包含一些制造和消费信息的特性.

Transaction: 对事务的管理, 这些事务必须实现特定的接口, 并且对所有的POJO都使用.

3.Web模块

WEB模块提供对常见框架如Struts,JSF的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器。

web: 提供基础的面向web的集成特性,如文件上传,使用servlet listeners初始化IOC容器以及一个面向web的应用上下文.

web-servlet: 包含Spring的model-view-controller(MVC)实现, Spring的MVC框架使得模型范围内的代码和web forms之间能够清楚的分开, 并与Spring框架的其他特性集成在一起.

web-struts: 提供对struts的支持, 是的类在Spring应用中能够与一个典型的struts web层集成在一起.

4.AOP

AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

使用"横切"技术,AOP把软件系统分为两个部分:核心关注点横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

Aspects: 提供了对AspectJ的集成支持

Instrumentation: 提供了Class instrumentation支持和classloader实现,使得可以在特定的应用服务器上的使用.

Join point(连接点):在应用程序中它代表一个点

Pointcut(切入点):这是一组一个或多个连接点,通知应该被执行

Advice(通知): 这是实际行动之前或之后执行的方法

Introduction(引用):引用允许添加新方法或属性到现有的类中

Target object(被通知对象):被一个或者多个方面所通知的对象,这个对象永远是一个被代理对象.

Weaving:Weaving 把方面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象,这些可以在编译时,类加载时和运行时完成.

5. Test

Test模块支持使用Junit和TestNGINX对Spring组件进行测试

2.spring的主要模块作用的更多相关文章

  1. spring cloud各个模块作用

    Eureka Client:负责将这个服务的信息注册到Eureka Server中.Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号.ribbon:负载均衡,获 ...

  2. Spring模块作用

    0.模块整理 Spring模块整理(http://www.kuqin.com/shuoit/20150805/347434.html) 模块名 作用 资料 aop  spring的面向切面编程,提供A ...

  3. Spring之WEB模块

    Spring的WEB模块用于整合Web框架,例如Struts 1.Struts 2.JSF等 整合Struts 1 继承方式 Spring框架提供了ActionSupport类支持Struts 1的A ...

  4. Spring Boot 多模块项目创建与配置 (一) (转)

    Spring Boot 多模块项目创建与配置 (一) 最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多个模块.代码中的多模块是用maven管理的,每个模块都 ...

  5. Spring boot 多模块项目 + Swagger 让你的API可视化

    Spring boot 多模块项目 + Swagger 让你的API可视化 前言 手写 Api 文档的几个痛点: 文档需要更新的时候,需要再次发送一份给前端,也就是文档更新交流不及时. 接口返回结果不 ...

  6. Spring Boot 多模块项目创建与配置 (一)

    最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多个模块.代码中的多模块是用maven管理的,每个模块都使用spring boot框架.之前有零零散散学过一些 ...

  7. 【转】详解spring 每个jar的作用

    spring.jar 是包含有完整发布模块的单个jar 包.但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2. ...

  8. Spring Boot 多模块项目创建与配置 (转)

    转载:https://www.cnblogs.com/MaxElephant/p/8205234.html 最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多 ...

  9. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中的spring web MVC模块

    spring framework中的spring web MVC模块 1.概述 spring web mvc是spring框架中的一个模块 spring web mvc实现了web的MVC架构模式,可 ...

随机推荐

  1. ztree取消之前选中状态并设置新的选中

    var zTreeObject = $.fn.zTree.getZTreeObj("treeId"); var node = zTreeObject.getNodeByParam( ...

  2. JavaScript原生封装ajax请求和Jquery中的ajax请求

    前言:ajax的神奇之处在于JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果.Ajax 在浏览器与 Web 服务器之间使用异步 ...

  3. libevent实现对管道的读写操作

    读管道: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/t ...

  4. 100天搞定机器学习|Day55 最大熵模型

    1.熵的定义 熵最早是一个物理学概念,由克劳修斯于1854年提出,它是描述事物无序性的参数,跟热力学第二定律的宏观方向性有关:在不加外力的情况下,总是往混乱状态改变.熵增是宇宙的基本定律,自然的有序状 ...

  5. 在内网中 vue项目添加ECharts图表插件

    原文地址:https://www.cnblogs.com/aknife/p/11753854.html 最近项目中要使用到图表 但是项目在内网中无法直接使用命令安装 然后我在外网中弄个vue的项目(随 ...

  6. Selenium_css 元素定位

    1.通过id定位       # 代表id driver.find_element_by_css_selector("#kw").send_keys("hao" ...

  7. 概率及期望DP小结

    资源分享 26 个比较概率大小的问题 数论小白都能看懂的数学期望讲解 概念 \(PS\):不需要知道太多概念,能拿来用就行了. 定义 样本(\(\omega\)):一次随机试验产生的一个结果. 样本空 ...

  8. 直线DDA,直线和圆的Bresenham算法

    // DDA.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<Windows.h> #include<g ...

  9. WebApi PUT与DELETE类型访问报错

    * 方法一 在项目的Web.Config文件加入 <modules> <remove name="WebDAVModule" /> </modules ...

  10. RabbitMQ实战

    RabbitMQ消息队列 一.Hello World 1.amqp-client客户端依赖 2.Rabbitmq类与方法 二.交换机类型 Exchange Type 1.消息轮询分发(Round Ro ...