Spring学习(零):我们为什么要学习Spring
序言
通过使用Spring的IoC容器,可以对这些耦合关系(对Java代码而言)实现一个简单的文本化的操作;即是说通过一个或几个XML文文件,我们就可以方便的对应用对象的耦合关系进行浏览、修改和维护,这样可以在很大程度上简化应用的开发。并且,通过IoC容器实现的依赖反转,可以把依赖关系的管理从Java对象中解放出来交给IoC容器(即Spring框架)来完成,从而完成对象之间的关系解耦;让原本的对象-对象关系转化为对象-IoC容器-对象的关系,通过这种关系来体现Spring框架对应用平台的巨大作用。
对spring来说,
- 一方面,它通过IoC容器来管理POJO对象,以及它们相互之间的耦合关系,使企业的信息(数据)资源可以用简单的Java语言来抽象和描述;
- 另一方面,可以通过AOP,以动态和非侵人式的方式来增强服务的功能。
所以,我们可以把IoC容器和AOP模块看做Spring的核心部分。作为核心,它们代表了最为基础的底层抽象,同时也是Spring其它模块实现的基础。虽然作为使用者的我们大多数是开发者,只是在这两个模块的基础上进行相关的配置和使用,但是如果能够了解这两个核心模块的设计和实现,就像了解Linux核心的实现一样!毫无疑问,会让我们对整个平台的了解更上一层楼,对平台的认识也更为全面和系统。
Spring整体架构草图

应用场景
Spring是一个轻量级的框架。在Spring这个一站式应用平台或框架中,其中的各个模块除了依赖IoC容器和AOP之外,相互之间并没有很强的耦合性。Spring的最终目标是简化应用开发的编程模型。
它所提供的服务,可以贯穿应用到整个软件中,从最上层的WebUI到底层的数据操作,到其他企业信息数据的集成,再到各种J2EE服务的使用等等。这些企业应用服务,Spring都通过其特有的IoC容器和AOP模块实现。在实现过程中,Spring没有把这种复杂性转换成自己被使用的复杂性,这点无疑是成功的,同时大大拓宽了Spring的应用场景。一方面,我们可以把Spring作为一个整体来使用,另一方面,也可以各取所需,把Spring的各个模块拿出来独立使用,提供服务的具体需求。
因而,在对Spring的使用中,我们看到应用很少依赖于Spring特有的API;同时,由于spring本身的设计也是非常模块化的,这就为应用开发提供了EJB开发不曾提供的便利。
Spring的价值
在对Spring的应用中,Spring团队为我们列举了Spring的价值,非常值得参考:
- Spring是一个非侵人性(non-invasive)框架,其目标是使应用程序代码对框架的依赖最小化,应用代码可以在没有Spring或者其他容器的情况下运行。
- Spring提供了一个一致的编程模型,使应用直接使用POJO开发,从而可以与运行环境(如应用服务器)隔离开来。
- Spring推动应用的设计凤格向面向对象及面向接口编程转变,提高了代码的重用性和可测试性。
- Spring改进了体系结构的选择,虽然作为应用平台,Spring可以帮助我们选择不同的技术实现,比如从Mybatis切换到其他ORM工具,从SpringMVC切换到Struts,尽管我们通常不会这样做,但是我们在技术方案上选择使用Spring作为应用平台,Spring至少为我们提供了这种可能性和选择,从而降低了平台锁定的凤险。
参考书籍:
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》
Spring学习(零):我们为什么要学习Spring的更多相关文章
- spring 学习(五):spring 事务
spring 学习(五):spring 事务 事务概要 一个数据库事务通常包含了一个序列的对数据库的读/写操作.它的存在包含有以下两个目的: 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同 ...
- Spring学习总结(一)——Spring实现IoC的多种方式
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创 ...
- Spring学习总结(三)——Spring实现AOP的多种方式
AOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的横向多模块统一控制的一种技术.AOP是OOP的补充,是Spring框架中的一个 ...
- Spring学习总结(19)——Spring概念详解
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spring是一个分层的JavaSE/EEfull-stack(一 ...
- Spring学习总结(六)——Spring整合MyBatis完整示例
为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简 ...
- Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中. 使用这个类库中的类, Spring 将会加载必要的MyBatis工厂类和 session 类. 这个类库 ...
- Spring学习笔记(二)Spring基础AOP、IOC
Spring AOP 1. 代理模式 1.1. 静态代理 程序中经常需要为某些动作或事件作下记录,以便在事后检测或作为排错的依据,先看一个简单的例子: import java.util.logging ...
- 【Spring学习笔记-MVC-15.1】Spring MVC之异常处理=404界面
作者:ssslinppp 异常处理请参考前篇博客:<[Spring学习笔记-MVC-15]Spring MVC之异常处理>http://www.cnblogs.com/sssl ...
- 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传
作者:ssslinppp 1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...
随机推荐
- [译文]Domain Driven Design Reference(四)—— 柔性设计
本书是Eric Evans对他自己写的<领域驱动设计-软件核心复杂性应对之道>的一本字典式的参考书,可用于快速查找<领域驱动设计>中的诸多概念及其简明解释. 其它本系列其它文章 ...
- Word2Vec总结
摘要: 1.算法概述 2.算法要点与推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 Word2Vec是一个可以将语言中的字词转换为向量表达(Vecto ...
- SpringBoot(三)_controller的使用
针对controller 中 如何使用注解进行解析 @RestController 返回数据类型为 Json 字符串,特别适合我们给其他系统提供接口时使用. @RequestMapping (1) 不 ...
- 再不了解PostgreSQL,你就晚了之PostgreSQL主从流复制部署
前言 在MySQL被收购之后,虽然有其替代品为: MariaDB,但是总感觉心里有点膈应.大家发现了另一款开源的数据库: PostgreSQL. 虽然centos自带版本9.2也可以用,但是最近的几次 ...
- nodejs操作redis总结
本文总结常见的使用node操作redis服务,redis的key是唯一的,如果一个key所对应的存储类型是string,则不能再次覆盖式设置key为hash; 1. 启动redis 这里我们使用doc ...
- Vue.js-09:第九章 - 组件基础再探(data、props)
一.前言 在上一章的学习中,我们学习了 Vue 中组件的基础知识,知道了什么是组件,以及如何创建一个全局/局部组件.不知道你是否记得,在上一章中,我们提到组件是一个可以复用的 Vue 实例,它与 Vu ...
- 【重学计算机】操作系统D4章:设备管理
1. IO的控制方式 演进过程:轮询 --> 中断 --> DMA --> IO通道 经典布局:南北桥 PS:详见<计算机组成原理> 2. IO的实现 软件实现层次:硬件 ...
- Firemonkey 原生二维码扫描优化
之前用了ZXing的Delphi版本,运行自带的例子,速度非常慢,与安卓版本的相比查了很多,因此打算使用集成jar的方法,但是总觉得美中不足. 经过一番研究,基本上解决了问题. 主要有两方面的优化: ...
- Spring Boot入门(四):开发Web Api接口常用注解总结
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...
- Android values资源的定义
Android values资源是Xml格式的文件 上图定义了颜色(colors)字符串(strings)样式(style)三个资源文件 xml文件写在resources标签里 <?xml ve ...