1.简化Java开发

Spring是一个开源框架,它的根本使命在于简化java开发。为了降低java开发的复杂性,Spring采取了以下4种关键策略:

基于POJO的轻量级和最小侵入性编程
      有很多框架强迫应用继承它们的类或实现它们的接口从而导致应用与框架绑死,而基于Spring构建的应用通常没有任何痕迹表明你使用了Spring,最坏的场景是一个类或许会用到Spring注解,但它依旧是POJO。

  通过依赖注入和面向接口实现松耦合
  任何应用都会由多个类相互协作完成业务逻辑,按照传统做法,每个对象负责管理与自己协作的对象的引用,这会导致代码高度耦合和难以测试。通过依赖注入(DI),对象的依赖关系由Spring负责管理,对象无需创建或管理它们的依赖关系,依赖关系将被自动注入到需要到它们的对象中去。通过面向接口,依赖能够用不同的具体实现进行替换。创建组件之间协作的行为通常称为装配,Spring通过应用上下文装载bean的定义并把它们组装起来,Spring应用上下文全权负责对象的创建和组装。Spring有多种应用上下文的实现,它们的区别在于加载配置的方式不同。

  基于切面和惯例进行声明式编程
  面向切面编程(AOP)能够将遍布应用各处的功能分离出来形成可重用的组件。AOP能够使诸如日志、事务管理和安全这些服务模块化,并以声明的方式将它们应用到需要它们影响的组件中去。这样这些组件会具有更高的内聚性并且会更加关注自身的业务。AOP能够确保POJO的简单性。

  通过切面和模板减少样板式代码
  Spring旨在通过模板封装来消除样板式代码。

2.容纳你的Bean

  在基于Spring的应用中,应用对象生存于Spring容器中,Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期。Spring自带多个容器实现,可以归为两种不同的类型。bean工厂是最简单的容器,提供基本的DI支持。应用上下文基于BeanFactory构建,提供应用框架级别的服务,通常选择应用上下文作为Spring容器的实现。Spring容器中的bean的生命周期相对复杂,正确理解Spring bean的生命周期非常重要,因为你或许要利用Spring提供的扩展点来自定义bean的创建过程。

3.俯瞰Spring风景线

  Spring的核心在于DI和AOP,Spring框架包含多个模块,为开发企业级应用提供了所需的一切,但开发者不必将应用建立在整个Spring框架之上,可以选择自身应用需求的Spring模块,当Spring不能满足需求时,也可以考虑其它选择,Spring提供了与其它第三方框架和类库的集成点。

  Spring模块

  Spring核心容器
  容器是Spring框架最核心的部分,它管理Spring应用中bean的创建、配置和管理。该模块包括了Bean工厂和基于Bean工厂的多种Spring应用上下文的实现。除此之外,该模块提供了许多企业级服务,如E-mail、JNDI访问、EJB集成和调度。

  Spring的AOP模块
  这个模块是Spring应用中开发切面的基础,与DI一样,AOP可以帮助应用对象解耦。借助于AOP,可以将遍布系统的关注点(例如事务和安全)从它们所应用的对象中解耦出来。

  数据访问与集成
  通过JDBC编写代码通常会导致大量的样板式代码,Spring的JDBC和DAO模块抽象了样板式代码,使数据库代码变得简单明了。Spring也提供了ORM模块,Spring的ORM模块建立在对DAO的支持之上,并为多个ORM框架提供了一种构建DAO的简便方式,Spring集成了多个流行的ORM框架。本模块包含了在JMS之上构建的Spring抽象层,它会使用消息以异步的方式与其它应用集成。本模块还包含对象到XML映射的特性,它最初是Spring Web Service项目的一部分。除此之外,本模块会使用Spring AOP模块为Spring应用中的对象提供事务管理服务。

  Web与远程调用
  MVC模式是一种普遍被接受的构建Web应用的方法,本模块自带了一个强大的MVC框架,有助于在Web层提供应用的松耦合水平。该模块还提供了多种构建与其它应用交互的远程调用方案。Spring远程调用功能集成了RMI、Hessian、Burlap、JAX-WS,同时还自带了一个远程调用框架HTTP invoker。Spring还提供了暴露和使用REST API的良好支持。

  Instrumentation
  本模块提供了为JVM添加代理的功能。本模块的使用场景非常有限。

  测试
  Spring提供了测试模块以致力于Spring应用的测试。Spring为使用JNDI、Servlet和Portlet编写单元测试提供了一系列的mock对象实现。对于集成测试,该模块为加载Spring应用上下文中的bean集合以及Spring上下文的bean进行交互提供了支持。

  Spring Portfolio

  Spring Portfolio包括多个构建于核心Spring框架之上的框架和类库,包括Spring Web Flow(基于流程的会话式Web应用,如购物车、向导功能)、Spring Security(利用AOP,Spring Security为Spring应用提供了声明式的安全机制)、Spring Data(为多种数据库类型,无论是关系型数据库还是NoSQL数据库,都提供了一种简单的编程模型)、Spring Boot(简化Spring本身,Spring Boot大量依赖于自动配置技术,能够消除大部分Spring配置)。

SpringInAction读书笔记--第1章Spring之旅的更多相关文章

  1. SpringInAction读书笔记--第4章面向切面

    1.什么是面向切面编程 在软件开发中,散布于应用中多处的功能被称为横切关注点,这些横切关注点从概念上是与应用的业务逻辑相分离的,但往往分直接嵌入到应用的业务逻辑之中,把这些横切关注点与业务逻辑相分离正 ...

  2. SpringInAction读书笔记--第2章装配Bean

    实现一个业务需要多个组件相互协作,创建组件之间关联关系的传统方法通常会导致结构复杂的代码,这些代码很难被复用和单元测试.在Spring中,对象不需要自己寻找或创建与其所关联的其它对象,Spring容器 ...

  3. 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度

    <Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...

  4. 《Linux内核设计与分析》第六周读书笔记——第三章

    <Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...

  5. 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度

    20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...

  6. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

  7. 《LINUX内核设计与实现》第三周读书笔记——第一二章

    <Linux内核设计与实现>读书笔记--第一二章 20135301张忻 估算学习时间:共2小时 读书:1.5 代码:0 作业:0 博客:0.5 实际学习时间:共2.5小时 读书:2.0 代 ...

  8. 《Linux内核设计与实现》第四周读书笔记——第五章

    <Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...

  9. 《Linux内核设计与实现》第五周读书笔记——第十一章

    <Linux内核设计与实现>第五周读书笔记——第十一章 20135301张忻 估算学习时间:共2.5小时 读书:2.0 代码:0 作业:0 博客:0.5 实际学习时间:共3.0小时 读书: ...

随机推荐

  1. CopyU!v2 已经收录到腾讯软件管家!

    腾讯软件管家已经正式收录了CopyU!,这样大家又多了一个安全快速下载软件的好途径!腾讯渠道的CopyU!更新将会保持与官方同步,现有下载CopyU!软件的渠道中,官方保证同步的主要有: 1.非凡软件 ...

  2. ios开发——实用技术OC篇》倒计时实现的两种方法

    倒计时实现的两种方法 timeFireMethod函数,timeFireMethod进行倒计时的一些操作,完成时把timer给invalidate掉就ok了,代码如下: secondsCountDow ...

  3. 用 Graphviz 可视化函数调用

    http://www.ibm.com/developerworks/cn/linux/l-graphvis/

  4. apache常见错误汇总

    <>问题: Access forbidden! You don't have permission to access the requested directory. There is ...

  5. 用const取代宏定义更好的管理内存

    用const取代宏定义更好的管理内存 宏:只是在预处理器里进行文本替换,没有类型,不做任何类型检查,编译器可以对相同的字符串进行优化.只保存一份到 .rodata 段.甚至有相同后缀的字符串也可以优化 ...

  6. dem30下载地址

    http://www.gscloud.cn/listdata/listdata_new.shtml?from=&productId=311#Wzg4LFswLDEwLDEsMF0sW10sW1 ...

  7. SSIS 学习(6):包配置(上)【转】

    Integrartion Services 包实际上就是一个对象属性的集合,在前面我们开发的所有 Integration Services包,其中的变量.属性,比如:数据库链接.同步文件目录等,我们都 ...

  8. javaScript入门--引用类型

    前面提到过,引用类型的值便是对象,在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,而对象则是某个特定引用类型的实例. var a=new Object(); 上面便声明了 ...

  9. VMware系统运维(一)安装Esxi

    1.下载ISO文件,开始安装,如图1,直接按回车进行安装. 图1 2.按回车键继续安装,如图2所示 图2 3.选择要安装系统的磁盘,按回车继续,如图3所示 图3 4.选择对应的键盘语言,按回车继续,如 ...

  10. MSP430常见问题之看门狗及定时器类

    Q1. 定时器两个中断TAIE 和CCIE,有什么区别?两个中断的中断向量一样吗?A1:TAIE 和CCIE指的是不同事件.TAIE指TAR 计数器溢出,从65535 到0 的变化,由TAIFG 引起 ...