Spring体系结构详解

Spring 框架采用分层架构,根据不同的功能被划分成了多个模块,这些模块大体可分为 Data Access/Integration、Web、AOP、Aspects、Messaging、Instrumentation、Core Container 和 Test

Spring的体系结构如下图所示
在这里插入图片描述

图中包含了 Spring 框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择性地使用所需要的模块。下面分别对这些模块的作用进行简单介绍。

1. Data Access/Integration(数据访问/集成)

数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。

JDBC 模块:提供了一个 JDBC 的抽象层,大幅度减少了在开发过程中对数据库操作的编码。

ORM 模块:对流行的对象关系映射 API,包括 JPA、JDO、Hibernate 和 iBatis 提供了的集成层。

OXM 模块:提供了一个支持对象/XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。

JMS 模块:指 Java 消息服务,包含的功能为生产和消费的信息。

Transactions 事务模块:支持编程和声明式事务管理实现特殊接口类,并为所有的 POJO。

2. Web 模块

Spring 的 Web 层包括 Web、Servlet、Struts 和 Portlet 组件,具体介绍如下。

Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IoC 容器初始化以及 Web 应用上下文。

Servlet模块:包括 Spring 模型—视图—控制器(MVC)实现 Web 应用程序。

Struts 模块:包含支持类内的 Spring 应用程序,集成了经典的 Struts Web 层。

Portlet 模块:提供了在 Portlet 环境中使用 MV C实现,类似 Web-Servlet 模块的功能。

3. Core Container(核心容器)

Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 Expression Language 表达式语言模块组成,具体介绍如下。

Beans 模块:提供了 BeanFactory,是工厂模式的经典实现,Spring 将管理对象称为 Bean。

Core 核心模块:提供了 Spring 框架的基本组成部分,包括 IoC 和 DI 功能。

Context 上下文模块:建立在核心和 Beans 模块的基础之上,它是访问定义和配置任何对象的媒介。ApplicationContext 接口是上下文模块的焦点。
Expression Language 模块:是运行时查询和操作对象图的强大的表达式语言。

4. 其他模块

Spring的其他模块还有 AOP、Aspects、Instrumentation 以及 Test 模块,具体介绍如下。

AOP 模块:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。

Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。

Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。

Test 模块:支持 Spring 组件,使用 JUnit 或 TestNG 框架的测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python时间戳是什么意思_Python-时间戳

# import time# 返回时间戳# print(time.time()) #返回时间戳# print(time.gmtime()) #返回utc时间戳# print(time.localtime(time.time()-86400)) #返回当地的时间戳# print(time.strftime("%Y-%m-%d",time.localtime())) #将struct_time转为字符串# print(time.mkt…

java对外查询接口注意的地方_Java接口注意点

1、接口可以多实现:一个实现类可以同时实现多个接口package com.qf.demo02_interface;//定义一种规则:interface A{public void testA();//public void fun();}//定义另一种规则interface B{public void testB();public void fun();}//实现类&#xff0c…

Spring目录结构和基础JAR包介绍

目前 Spring 框架的最新版本是 5.1.8,本教程是基于 Spring 的稳定版本 3.2.13 进行讲解的。读者可以通过网址 http://repo.spring.io/simple/libs-release-local/org/springframework/spring/ 下载名称为 springframework-3.2.13.RELEASE-dist.zip 的压缩包。单击此…

自定义依赖注解无效_SpringValidation用注解代替代码参数校验解析

Spring Validation概念在原先的编码中,我们如果要验证前端传递的参数,一般是在接受到传递过来的参数后,手动在代码中做 if-else 判断,这种编码方式会带来大量冗余代码,十分的不优雅。因此,推出了用注解的方…

mysql开源许可_为什么开源数据库改变许可证?

CockroachDB 是一个开源的分布式数据库,最近改变了代码授权,放弃了 Apache 许可证。一、CockroachDB 的许可证变更CockroachDB 以前的许可证是 Apache,代码托管在 GitHub,任何人都可以访问。现在的许可证改成了"商业源码许可…

Spring IoC容器

我们将详细介绍 Spring 的 Ioc 容器。 IoC 是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 S…

python相同怎么写_这两个index相同的dataframe我想把他们merge,怎么写?

能具体点么?这是这两df的代码# -*- coding: utf-8 -*-import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport tracebackfrom tools import *import matplotlib as mplimport pickleimport datetime as dtdf1 pd.DataFrame({A0: [A0, A1, …

python里删除range里的数字_python中range函数与列表中删除元素

一、range函数使用range(1,5) 代表从1到4(不包含5),结果为:1,2,3,4 ,默认步长为1range(1,5,2) 结果为:1, 3 (同样不包含5) ,步长为2range(5,-1,-1) 反向输出,结果为:5,4,3,2,1,0 &#…

python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化

1、上节课代码中的问题 第四课中介绍了python持久化的基础实例——将数据写入文本文件。 可当我们试着把保存数据的文件读取出来会怎样呢? try: with open(man.txt, r) as fman: print(fman.readline())except IOError as err: print(str(err)) 执行时,1…

Spring 依赖注入的实现

依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念。 当某个 Java 实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的实例(例如,使用 new…

arduino倾斜开关python语言_Arduino小白的学习记录:倾斜开关实验

一、介绍带有金属球的球形倾斜开关,它用于检测小角度的倾斜。图7.1 倾斜开关模块二、材料准备Arduino Uno 主板*1USB数据线*1倾斜开关模块*1杜邦线若干三、实验原理在倾斜开关中小球以不同的倾斜角度移动以造成触发电路的原理。倾斜开关模块使用双向传导的球形倾斜开…

Spring Bean的配置及常用属性

作为 Spring 核心机制的依赖注入,改变了传统的编程习惯,对组件的实例化不再由应用程序完成,转而交由 Spring 容器完成,在需要时注入应用程序中,从而对组件之间依赖关系进行了解耦。这一切都离不开 Spring 配置文件中使…

java 静态对象语法_04.Java 语法

计算机基础知识表达式(expression):Java中最基本的一个运算。比如一个加法运算表达式。12是一个表达式,ab也是。计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit。它的二进制表示范围从00000000~1111…

python 化学模块_Python chemif包_程序模块 - PyPI - Python中文网

实施解决这个问题的方法是使用一个while循环的递归下降算法。这个循环的基本结构是:todo [[item1, processing_data],[item2, processing_data], ... ]done []while len(todo)>0:item_to_workon todo.pop()for each_branch in branches:stuff.do()data.proces…

Spring实例化Bean

在面向对象的程序中,要想调用某个类的成员方法,就需要先实例化该类的对象。在 Spring 中,实例化 Bean 有三种方式,分别是构造器实例化、静态工厂方式实例化和实例工厂方式实例化。 构造器实例化 构造器实例化是指 Spring 容器通…

centos7配置mysql其他机器访问_CentOS7安装MySQL并开启远程访问详解

1.安装MySQLCentOS7中默认安装了MySQL系列的数据库,需要先卸载掉。查看当前安装的mariadb包:[[email protected] desktop]# rpm -qa | grep mariadb将它们统统强制性卸载掉:[[email protected] 桌面]# rpm -e --nodeps mariadb-libs-5.5.35-3…

python单元测试框架unittest介绍和使用_Python单元测试框架unittest简明使用实例

测试步骤1. 导入unittest模块import unittest2. 编写测试的类继承unittest.TestCaseclass Tester(unittest.TestCase)3. 编写测试的方法必须以test开头def test_add(self)def test_sub(self)4.使用TestCase class提供的方法测试功能点5.调用unittest.main()方法运行所有以test开…

python堆模块_python内置堆模块

heapqpython内置heapq模块,通过import heapq导入。heapq模块是用于堆实现优先队列。我们知道队列是先进先出(FIFO),heapq中的优先队列指的是不论谁先进,最小的先出或者最大的先出。# 需要注意的是heapq的堆是小根堆。01 23 4 5 67 8 9 10 11 …

Java连接数据库所遇到的坑,连接数据库,遇到一个很奇怪的问题……

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼这个程序,运行之后发现成功连接上了然后我又看一眼,发现 DatabasName 拼错了,少写了一个 e没想到改正后反而报错了!com.microsoft.sqlserver.jdbc.SQLServerException: Cannot open d…

如何用python的i2c教程_Micropython TPYBoard I2C的用法

先看看基本用法:from pyb import I2Ci2c I2C(1) # create on bus 1i2c I2C(1, I2C.MASTER) # create and init as a masteri2c.init(I2C.MASTER, baudrate20000) # init as a masteri2c.init(I2C.SLAVE, addr0x42) # i…