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. JQuery Plugin 2 - Passing Options into Your Plugin

    overriding the default options with user-supplied options and the jQuery extend() method eg: $.fn.pu ...

  2. Codeforces Gym 100418B 暴力

    Sum of sequencesTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/v ...

  3. android.content.res.Resources$NotFoundException:String resource ID #ffffffff

    无语,搞了半天,只能去插这个错误代号,结果就找到了这个结果. scoreTextView.setText(score+""); 这个一定要自己手动转换..不科学啊..关键是在ecl ...

  4. [GIF] The Phase Property in GIF Loop Coder

    In this lesson, we look at one of the most powerful features in GIF Loop Coder, the phase property, ...

  5. iOS开发——总结篇&关键字介绍

    关键字介绍 在做iOS开发中,系统的各个关键字处处都是,但是未必每一个关键字都是那么的明白,所以罗列出一些关键字供大家互相学习,有不完善之处请指正,谢谢 atomic atomic是Objc使用的一种 ...

  6. hdu 3006 枚举集合能够产生的全部并集的集合

    http://acm.hdu.edu.cn/showproblem.php? pid=3006 刚买的CHERRY键盘 手感真好 可惜不习惯 写代码老是打错.一个题写了一上午,都是各种按错键DEBUG ...

  7. Playing with ptrace, Part II

    Playing with ptrace, Part II Issue From Issue # December Dec , By Pradeep Padala inSysAdmin In Part ...

  8. 不安装oracle客户端也可以使用pl/sql developer

    通常情况下,用PL/SQL Developer连接Oracle是需要安装Oracle客户端软件的,这也就意味着你的硬盘将被占用大约1G-2G的空间,对于Windows操作系统来说,你还会多出一些开机自 ...

  9. Explain的type, where 和 order by 组合是索引的选择

    Explain的type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是: system > const > eq_ref > ref > fulltext > ...

  10. Android之Handler探索

    Handler背景理解: Handler被最多的使用在了更新UI线程中,但是,这个方法具体是什么样的呢?我在这篇博文中先领着大家认识一下什么是handler以及它是怎么样使用在程序中,起着什么样的作用 ...