Spring框架

Spring框架是一个分层架构,由7个定义良好的模块组成。Spring框架构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式,如下图所示:

Spring框架的7个模块

组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或对个模块联合实现。每个模块的功能如下:

  • 核心容器(Spring Core):核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Spring 上下文(Spring Context):Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
  • Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
  • Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
  • Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  • Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
  • Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用。

控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。

       面向方面的编程,即 AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。AOP 的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下文中。

BeanFactory  支持两个对象模型。

  • 单态 模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。
  • 原型 模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。

SpringMVC框架

MVC(Model-View-Control):Control层属于框架部分,主要完成的工作是:封装web请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结构以及相应的师徒给客户端。

SpringMVC 和 Struts2 都是表现层的框架,是 Spring 框架的一部分,Spring 框架中 Control 层的核心是DispatcherServlet,它的作用是将请求分发给不同的后端处理器。

Spring 的 Control 层框架使用了后端控制器来映射处理器和视图解析器来共同完成 Control 层框架的主要工作。并且 spring 的 Control 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即 ModelAndView 对象。

SpringMVC框架处理流程

SpringMVC框架访问流程

MyBatis框架

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

图片来源于《《深入理解mybatis原理》 MyBatis的架构设计以及实例分析》

从MyBatis代码实现的角度来看,MyBatis的主要的核心部件有以下几个:

  • SqlSession            作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
  • Executor              MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
  • StatementHandler   封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
  • ParameterHandler   负责对用户传递的参数转换成JDBC Statement 所需要的参数,
  • ResultSetHandler    负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
  • TypeHandler          负责java数据类型和jdbc数据类型之间的映射和转换
  • MappedStatement   MappedStatement维护了一条<select|update|delete|insert>节点的封装,
  • SqlSource            负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
  • BoundSql             表示动态生成的SQL语句以及相应的参数信息
  • Configuration        MyBatis所有的配置信息都维持在Configuration对象之中。

MyBatis层次结构:

图片来源于《《深入理解mybatis原理》 MyBatis的架构设计以及实例分析》

Hibernate框架

JDBC 代表 Java Database Connectivity ,它是提供了一组 Java API 来访问关系数据库的 Java 程序。这些 Java APIs 可以使 Java 应用程序执行 SQL 语句,能够与任何符合 SQL 规范的数据库进行交互。

  • Hibernate框架是应用在JavaEE三层结构中的dao层框架
  • 使用Hibernate框架在dao层里面做对数据库的增删改查操作。Hibernate框架底层是JDBC,使用Hibernate框架对JDBC轻量级的封装,可以不需要写复杂的JBDC代码
  • Hibernate框架是开源的,轻量级的框架(Hibernate框架不需要依赖其他东西就可以直接使用)

Hibernate 优势

  • Hibernate 使用 XML 文件来处理映射 Java 类别到数据库表格中,并且不用编写任何代码。
  • 为在数据库中直接储存和检索 Java 对象提供简单的 APIs。
  • 如果在数据库中或任何其它表格中出现变化,那么仅需要改变 XML 文件属性。
  • 抽象不熟悉的 SQL 类型,并为我们提供工作中所熟悉的 Java 对象。
  • Hibernate 不需要应用程序服务器来操作。
  • 操控你数据库中对象复杂的关联。
  • 最小化与访问数据库的智能提取策略。
  • 提供简单的数据询问。

Hibernate应用程序体系结构图

配置对象
       配置对象是你在任何 Hibernate 应用程序中创造的第一个 Hibernate 对象,并且经常只在应用程序初始化期间创造。它代表了 Hibernate 所需一个配置或属性文件。配置对象提供了两种基础组件。
数据库连接:由 Hibernate 支持的一个或多个配置文件处理。这些文件是 hibernate.properties 和 hibernate.cfg.xml。
类映射设置:这个组件创造了 Java 类和数据库表格之间的联系。

  • SessionFactory 对象:配置对象被用于创造一个 SessionFactory 对象,使用提供的配置文件为应用程序依次配置 Hibernate,并允许实例化一个会话对象。SessionFactory 是一个线程安全对象并由应用程序所有的线程所使用。SessionFactory 是一个重量级对象所以通常它都是在应用程序启动时创造然后留存为以后使用。每个数据库需要一个 SessionFactory 对象使用一个单独的配置文件。所以如果你使用多种数据库那么你要创造多种 SessionFactory 对象。
  • Session 对象:一个会话被用于与数据库的物理连接。Session 对象是轻量级的,并被设计为每次实例化都需要与数据库的交互。持久对象通过 Session 对象保存和检索。Session 对象不应该长时间保持开启状态因为它们通常情况下并非线程安全,并且它们应该按照所需创造和销毁。
  • Transaction 对象:一个事务代表了与数据库工作的一个单元并且大部分 RDBMS 支持事务功能。在 Hibernate 中事务由底层事务管理器和事务(来自 JDBC 或者 JTA)处理。这是一个选择性对象,Hibernate 应用程序可能不选择使用这个接口,而是在自己应用程序代码中管理事务。
  • Query 对象:Query 对象使用 SQL 或者 Hibernate 查询语言(HQL)字符串在数据库中来检索数据并创造对象。一个查询的实例被用于连结查询参数,限制由查询返回的结果数量,并最终执行查询。
  • Criteria 对象:Criteria 对象被用于创造和执行面向规则查询的对象来检索对象。

Java主流开发框架相关推荐

  1. java前端框架有哪些( 目前java主流开发框架是哪个)

    1 SpringMVC 基本原理流程,3个线程以及之间的关联:Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想 ...

  2. Java主流框架面试题

    Java主流框架 1.Spring IOC IOC与DI的理解 Spring Bean实例化对象的三种形式 谈谈Spring Bean的生命周期和作用域? Spring的IOC四种注入方式 2.Spr ...

  3. 细说Java主流日志工具库

    细说 Java 主流日志工具库 日志框架 java.util.logging (JUL) Log4j Logback Log4j2 Log4j vs Logback vs Log4j2 日志门面 co ...

  4. TSS翻译:帮我选一个Java Web开发框架吧

    TSS:帮我选一个Java Web开发框架吧 最近 TheServerSide.com 上一篇文章引起了常常的讨论.地址见这里:Chose a web client framework. Cheste ...

  5. java eop_javashopeop Javashop-eop是一套开源的java快速开发框架 联合开发网 - pudn.com

    javashopeop 所属分类:Java编程 开发工具:Java 文件大小:10761KB 下载次数:5 上传日期:2017-01-24 13:21:05 上 传 者:zhangqiang 说明:  ...

  6. 后端开发基础能力以及就Java的主流开发框架介绍

    前言:java语言开发转后端,必须了解后端主流的一些东西,共勉. 后端开发需要具备以下基础能力: 1.编程语言:熟练掌握至少一门编程语言,如Java.Python.Ruby.PHP.C#等. 2.数据 ...

  7. java主流微服务框架_Spring Boot作为当下最流行的微服务开发框架,一名合格的Java开发者一定有所了解,...

    Spring Boot作为当下最流行的微服务开发框架,一名合格的Java开发者一定有所了解, Spring Boot相对于传统的SSM框架来说:springboot使用了特定的配置方式,开发人员不需要 ...

  8. 卧槽!成就了Java,开发框架排第一,你还是不够了解它!

    对于Java工程师来说,几乎没有没听过大名鼎鼎的Spring框架的,Spring框架早已成为了Java后端开发事实上的行业标准,可以说,是Spring成就了Java,Spring也成为Java程序员必 ...

  9. 细说 Java 主流日志工具库

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者:静默虚空 juejin.im/post/5c8f35bfe51d4545cc650567 ...

  10. 以简求快--java快速开发框架

    照例先发发牢骚,然后再进入正题. 领导说每个人应该看清自己的短板,我看的很清,我只是没上过他们所谓的学而已,这并不能成为我发展的障碍,更不能作为贬低我价值的理由. 最会做生意的人是,把成年的蛋鸡杀掉, ...

最新文章

  1. Elasticsearch之倒排索引
  2. 40行代码AC_HDU 1575 TrA 矩阵快速幂(附快速幂+矩阵快速幂的讲解)
  3. Android获取手机联系人或通讯录的基本信息(如姓名、电话)
  4. 【Win10】UAP/UWP/通用 开发之 x:Bind
  5. 换手机的等等!什么时候能用上1000元级5G手机?中国移动公布时间表
  6. html获取节点属性,JS操作属性节点(非常详细)
  7. FineReport性能调优的一些办法
  8. dom元素滚动条高度 js_js浏览器滚动条卷去的高度scrolltop(实例讲解)
  9. 论文阅读(XiangBai——【CVPR2017】Detecting Oriented Text in Natural Images by Linking Segments)...
  10. 干货来袭丨资产可用性真的是终极目标吗?
  11. 2022手机商城源码h5运营版本
  12. oracle建表空间 各种语句
  13. 麟龙指标通达信指标公式源码_通达信麟龙指标套三主图+副图指标 贴图
  14. Android文字转语音
  15. 计算机无法添加本地策略组,解决win10找不到本地组策略和本地用户的方法
  16. 我的第一篇博客——鸡汤博
  17. 钢铁骑士团服务器端文件,《钢铁骑士团》新手必读 游戏道具介绍
  18. 【SQL】实验十 数据库完整性实验
  19. 深入理解Java虚拟机之走进Java之Java的发展历程
  20. 联想小新潮7000-13安装黑苹果笔记,无需无线网卡(无需U盘+win双系统+opencore)

热门文章

  1. jq-ui的Sortable插件 两列布局 左右拖拽
  2. 2.解决Linux中文乱码问题
  3. windows下PTAM的编译
  4. 单片机语音播报怎么做?语音模块原理及程序编写思路
  5. IIS 部署的网站无法启动
  6. 二阶有源低通滤波器设计
  7. 快速傅里叶变换蝶式运算 matlab,FFT快速傅里叶变换(蝶形算法)详解.ppt
  8. 磁共振线圈分类_磁共振线圈(二)
  9. 操作系统课后答案第五章
  10. c语言单片机用法,单片机 C语音开发 sbit使用方法··