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. python的一些总结3

    好吧 刚刚的2篇文章都很水.. 这篇 也是继续水 在 templates 右键新建 html 文件:如 index.html (输入以下代码) <!DOCTYPE html> <ht ...

  2. 用C#调用Matlab图像处理自制QQ游戏2D桌球瞄准器

    平时不怎么玩游戏,有时消遣就玩玩QQ里的2D桌球,但是玩的次数少,不能像骨灰级玩家一样百发百中,肿么办呢?于是某天突发奇想,决定自己也来做个“外挂”.说是外挂,其实只是一个瞄准器,毕竟外挂是修改别人的 ...

  3. android 自定义按钮实现 home键 和返回键

    由于在自己做的东西中用到了就总结一下,自己做了测试 在一个程序运行中如果按 返回键  分别执行了 : onpause()     onStop()   onDestory()方法 如果点击 home键 ...

  4. C++ 排序函数 sort(),qsort()的使用方法

    想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描写叙述 sort 对给 ...

  5. 使用compareDocumentPosition比较两个元素在文档中的位置

    PS:尊重原创,转载请注明来自http://www.cnblogs.com/Raoh/p/js_compareDocumentPosition_between_two_node.html 使用comp ...

  6. Java中数组的快排

    描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符.   输入 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成, ...

  7. centos安装ftp

    yum install -y vsftpd安装vsftpd service vsftpd start 启动vsftpd vim /etc/vsftpd/vsftpd.conf 将anonymous_e ...

  8. mybatis缓存创建过程

    带着 上篇 的问题,再来看看mybatis的创建过程 1.从SqlSessionFactoryBuilder解析mybatis-config.xml开始 对文件流解析 XMLConfigBuilder ...

  9. H.264编码之IDCT变换原理

    上次讲到了DCT变换的推导过程,这次主要给大家讲下IDCT反变换的推导过程.建议大家先看上次讲的DCT变换公式推导过程.这样在看这篇文章时会容易很多!话不多说,让我们开始IDCT的旅程吧! IDCT反 ...

  10. [设计模式]<<设计模式之禅>>工厂方法模式

    1 女娲造人的故事 东汉<风俗通>记录了一则神话故事:“开天辟地,未有人民,女娲搏黄土做人”,讲述的内容就是大家非常熟悉的女娲造人的故事.开天辟地之初,大地上并没有生物,只有苍茫大地,纯粹 ...