Spring(一)开篇

目录

  • 1、Spring 介绍
  • 2、Spring 框架的演变
  • 3、Spring 整体架构
    • Core Container
    • Data Access/Integration
    • Web
    • AOP
    • Test
  • 最后

1、Spring 介绍

在早期 J2EE 时代,开发一个应用程序非常繁琐,先不说对象的创建及管理,如其它数据库访问、提供 Web 服务等都需耗费我们大量时间。当时一位名为 Rod Johnson 的澳大利亚人率先对这种 J2EE 系统框架臃肿、低效的种种现状提出了质疑,之后 Rod Johnson 编写《Expert one on one J2EE design and development》一书,通过书中阐述的部分理念和原型创建了Spring Framework 。(PS:Rod Johnson 居然是音乐学博士???)

Spring Framework 是一个轻量级的 Java开源框架,主要是为了解决企业应用开发的复杂性而创建。它的核心是帮助我们管理对象及其依赖关系,但还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还集成了大量的第三方框架,如数据库访问框架 Hibernate ,mybatis、Web 服务框架 Struts 、自身提供的SpringMVC,还有任务调度、Redis 缓存,Mq等。

Spring Framework 还致力于 J2EE 应用的各层解决方案,在表现层、业务层及持久层都集成了相应的功能框架,可以说 Spring 是企业应用开发的“一站式”解决方案。

但其实 J2EE 和 Spring 并不对立,Spring 是 J2EE 的补充,它将 J2EE 的各个规范集成在一起:

可以说 Spring 是“借鉴了”他山之石,来逐步实现自身的生态系统。

2、Spring 框架的演变

Spring 第一个版本于2002年10月发布,至今十几年间, Spring 框架的核心功能、社区支持等各方面都发展迅猛,所以有必要回顾一下Spring 每个里程碑版本所带来的重要特性。

  • Spring 0.9:这是该框架第一个公开发布的版本,以《Expert One-on-One: J2EE Design and Development》一书为基础,提供了 bean 配置基础、AOP 支持、JDBC 抽象框架、抽象事务支持等。该版本没有官方参考文档,但可以在SourceForge 上找到现有的源代码和文档。
  • Spring 1.x:这是发布的第一个带有官方参考文档的版本。由七个模块组成。
    • Spring Core、Spring Context、Spring DAO、Spring ORM、Spring AOP、Spring Web、Spring Web MVC
  • Spring 2.x:该版本由六个模块组成,Spring Context 模块融入了 Spring Core 中,Spring Web MVC 融入了 Spring Web 中。
    • 支持 AOP 开发的 @AspectJ 注解。
    • 完全支持异步JMS 消息驱动的POJO。
    • 为调度任务而引入的 TaskExecutor 抽象。
    • Java 5 注解支持,特别是 @Transactional、@Required 和 @AspectJ。
  • Spring 2.5.x:该版本包含以下功能。
    • 新增 @Autowired 注解以及对 JSR-250 注解(@Resource、@PostConstruct 和 @PreDestroy)的支持。
    • 新增注册 Bean 的相关注解:@Component、 @Repository、@Service 和 @Controller。
    • 除了Spring MVC @Controller 注解,还添加了 @RequestMapping、@RequestParam 和@ModelAttribute 注解,从而支持通过注解配置进行请求处理。
  • Spring 3.0.x:这是基于Java 5 的 Spring 第一个版本,旨在充分利用 Java5 的功能,如泛型、可变参数。
    • 支持 Java5 功能,例如泛型、可变参数。
    • 全面支持 REST。
    • 新的 MVC XML 名称空间和其他注解,例如 SpringMVC 中的 @CookieValue 和 @RequessHeaders。
    • 验证增强功能和 JSR-303 (Bean 验证)支持。
  • Spring 3.2.x:该版本包含以下功能。
    • 支持基于 Servlet 3.0 的异步请求处理。
    • 新的 SpringMVC 注解 @ControllerAdvice。
  • Spring 4.x:这是一个重要的 Spring 版本,也是第一个完全支持 Java 8 的版本。虽然仍然可以使用较旧的版本,但弃用的类和方法己被删除。
    • 全面支持 Hibernate ORM 5.0 。
    • JMS 和 Web 改进。
    • 对 WebSocket 消息传递的改进。
    • 引入了AopTestUtils 实用工具类,允许访问 Spring 代理的底层对象。
  • Spring 5.x:这是一个主要版本,整个框架都基于Java 8。
    • 充分利用Java 8 的强大功能,从而在性能上得到极大的改进。
    • 支持 JMS2.0+ 和 JPA 2.1+。
    • 引入了 Spring Web Flux,这是一个用于替代 SpringMVC 的项目,构建在反应式基础之上,完全是异步和非阻塞的。
    • Web 和核心模块适用于反应式编程模型。

3、Spring 整体架构

到了 Spring 5.0 时代,其模块大约有 20 个,如图:

这些模块被总结为以下几部分。

Core Container

Core Container(核心容器)包含 Core 、Beans 、Context 和 Expression Language 四个模块。

  • Core 模决主要包含 Spring 框架的核心工具类,是其他组件的基本核心。如动态代理相关的 asm、cglib,以及各种 Utils,StringUtils、CollectionUtils。
  • Beans 模块包含访问配置文件、创建和管理 bean 以及进行 IoC/DI 操作相关的所有类。如:BeanFactory、BeanDefinitions 等。
  • Context 模块构建于 Core 和Beans 模块基础之上,其继承了 Beans 的特性,为Spring 核心提供了大量扩展。ApplicationContext 接口是 Context 模块的核心。
  • Expression Language 模块提供了强大的表达式语言。就是在远古 JSP 时期使用的 EL 表达式。

Data Access/Integration

Data Access/Integration 包含 JDBC 、ORM 、OXM、JMS 和 Transaction 模块。

  • JDBC 模块提供了一个JDBC 抽象层,用来适配所有的数据库厂商。这个模块包含了 Spring 对 JDBC 数据访问进行封装的所有类。
  • ORM 模块提供了几种常用的对象关系映射框架,如 JPA 、Hibernate 、iBatis 。
  • OXM 模块提供了一个对ObjecνXML 映射实现的抽象层。
  • JMS (Java Messaging Service)模块主要包含一些生产和消费消息的特性。
  • Transaction 模块支持编程和声明性的事务管理。

Web

Web 层包含了Web 、Servlet 、WebSocket、Porlet 模块。

  • Web 模块:提供了基础的面向Web 的集成特性。例如,多文件上传。
  • Servlet 模块:该模块包含Spring 的model-view-controller (MVC)实现。
  • WebSocket 模块:提供 WebSocket 协议支持。
  • Porlet 模块:提供了用于 Portlet 环境和 Servlet 模块的 MVC 的实现

AOP

AOP 模块提供了一个符合 AOP 联盟标准的面向切面编程实现,它让你可以定义例如方法拦截器和切点,从而将逻辑代码分开,降低它们之间的耦合性。

  • Aspects 模块提供了对AspectJ 的集成支持。
  • Instrumentation 模块提供了class instrumentation 支持和classloader 实现,使得可以在特定的应用服务器上使用。
  • Messaging 模块:对消息通信集成提供了广泛的支持,及提供简化 JMS API 的使用到异步接收消息的完整基础结构。

Test

Test 模块支持使用 JUnit 和TestNG 对 Spring 组件进行测试。

最后

Spring 背景及架构就介绍到这,接下来将对 Spring 核心容器、AOP、事务这三部分内容展开一系列的讨论。

注:该系列文章使用的 Spring 版本是 5.0+。

以上就是本章内容,如果文章中有错误或者需要补充的请及时提出,本人感激不尽。

参考:

《Spring 源码深度解析(第二版)》
《Spring5 高级编程》
《SpringBoot 编程思想》
https://baike.baidu.com/item/spring/85061#2
https://docs.spring.io/spring/docs/5.2.2.RELEASE/spring-framework-reference/overview.html#overview

原文地址:https://www.cnblogs.com/loongk/p/12194690.html

时间: 2024-10-16 06:04:23

Spring(一)开篇的相关文章

玩转spring boot——开篇

很久没写博客了,而这一转眼就是7年.这段时间并不是我没学习东西,而是园友们的技术提高的非常快,这反而让我不知道该写些什么.我做程序已经有十几年之久了,可以说是彻彻底底的“程序老炮”,至于技术怎么样?我个人认为是非常一般.如果单纯从技术来说,其实有工作3年的工作经验的人技术就已经很好了,后面工作时间是为了增加经验和对编程的理解.随着工作时间的增加,就会对一个技术有更深层次的理解,反而发现自己需要学更多的新.并觉得自己什么都不会.什么都不懂,还需要不停的学习和提高,并觉得时间更本不够用.自己唯一的收

spring开篇

Spring 开篇 Data access结构体系图 Spring的第一个案例 1.引依赖  jar包 beans自动引入core <!-- beans -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-beans</artifactId>      <version>4.2.3.RELEASE&l

Spring Boot实践教程:开篇

前言 ??Java项目开发Spring应该是最常被用到的框架了,但是老式的配置方式让人觉得特别的繁琐,虽然可以通过注解去简化xml文件的配置,但是有没有更简单的方式来帮我们完成这些重复性的事情呢?于是Spring Boot就出现了,Spring Boot极大的简化了Spring的应用开发,它采用约定优于配置的方式,让开发人员能够快速的搭建起项目并运行起来. ??我们在项目开发的过程中,总免不了要整合各种框架,类似什么SSM.SSH之类的,这些框架的整合过程是繁琐的,同时又是无聊的,因为大部分情况

spring boot + vue + element-ui全栈开发入门——开篇

最近经常看到很多java程序员朋友还在使用Spring 3.x,Spring MVC(struts),JSP.jQuery等这样传统技术.其实,我并不认为这些传统技术不好,而我想表达的是,技术的新旧程度体现了做项目时的生产力.生产力低了,项目的开发成本就高.反之,生产力高,则成本低.笔者写本系列的目的是让使用“前后端不分离”的老技术的开发者做一个入门级的过度.因为目前流行的“前后端分离”技术足够简单,足够方便,足够易学,也足够完善. 项目所使用的前端技术是:element-ui,文档地址是:ht

spring cloud(一):微服务架构开篇

在公司使用spring cloud快一年了,项目也上线了,同时在线用户到达有几十万,公司之前用的是传统项目部署,业务放在一起,导致系统庞大,难以维护;采用spring cloud之后,一个业务对应一个独立的模块,也就是我们所说的微服务,开发人员维护起来就没那么困难,同时系统启动较快,下面就讲解下项目用到的技术框架: Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路器.数

spring源码-开篇

一.写博客也有一段时间了,感觉东西越来越多了,但是自己掌握的东西越来越少了,很多时候自己也在想.学那么多东西,到头来知道的东西越来越少了.是不是很奇怪,其实一点都不奇怪. 我最近发现了一个很大的问题,就是自己做开发这么久了.很多原理以及实现都不是很了解,包括自己在假装面试了解自己不足的时候,也突显除了自己的问题所在.面试官会问你,你真的懂这个技术吗.那么它的实现原理是怎么样的,简单的描述一下.当时我就懵逼了,这个问题说严重也严重,说不严重也不严重. 因为,作为2年开发的我.开发和自己积累下来的应

小代学Spring Boot之开篇

想要获取更多文章可以访问我的博客?-?代码无止境. 前情提要 小代是一名入职不久的程序员,公司同事都亲切的称他小代.有一天小代的老大陈BOSS和小代说,公司后端最近准备换技术框架了. 小代: 换成啥? 陈BOSS: Spring Boot,听过没? 小代: 当然听说过,就是由Pivotal团队开发的一个新的框架,它主要是简化Spring应用程序的搭建和开发过程. 陈BOSS: 哟呵,想不到你还知道的挺多的.那挺好啊,现在我给你给任务,搭建一个基于一个Spring Boot的Web示例程序,作为公

Spring源码剖析开篇:什么是Spring?

在讲源码之前,先让我们回顾一下一下Spring的基本概念,当然,在看源码之前你需要使用过spring或者spirngmvc. Spring是什么 Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发.应用程序是由一组相互协作的对象组成.而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成.所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合

Spring与Mybatis环境搭建 【转】

SH框架的结合几乎家喻户晓,但是一般的中小项目,使用Spring和MyBatis就够了,而且MyBatis轻便好使,易上手,值得大家尝试一次. 开篇简介: Spring: Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. 两个重要模块:Spring 面向方面编程(AOP)和控制反转 (IOC) 容器. 控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务. 容器 (