SpringInAction读书笔记--第1章Spring之旅
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之旅的更多相关文章
- SpringInAction读书笔记--第4章面向切面
1.什么是面向切面编程 在软件开发中,散布于应用中多处的功能被称为横切关注点,这些横切关注点从概念上是与应用的业务逻辑相分离的,但往往分直接嵌入到应用的业务逻辑之中,把这些横切关注点与业务逻辑相分离正 ...
- SpringInAction读书笔记--第2章装配Bean
实现一个业务需要多个组件相互协作,创建组件之间关联关系的传统方法通常会导致结构复杂的代码,这些代码很难被复用和单元测试.在Spring中,对象不需要自己寻找或创建与其所关联的其它对象,Spring容器 ...
- 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度
<Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...
- 《Linux内核设计与分析》第六周读书笔记——第三章
<Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...
- 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度
20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...
- 《Linux内核分析》读书笔记(四章)
<Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...
- 《LINUX内核设计与实现》第三周读书笔记——第一二章
<Linux内核设计与实现>读书笔记--第一二章 20135301张忻 估算学习时间:共2小时 读书:1.5 代码:0 作业:0 博客:0.5 实际学习时间:共2.5小时 读书:2.0 代 ...
- 《Linux内核设计与实现》第四周读书笔记——第五章
<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...
- 《Linux内核设计与实现》第五周读书笔记——第十一章
<Linux内核设计与实现>第五周读书笔记——第十一章 20135301张忻 估算学习时间:共2.5小时 读书:2.0 代码:0 作业:0 博客:0.5 实际学习时间:共3.0小时 读书: ...
随机推荐
- POJ 3522 Slim Span 最小差值生成树
Slim Span Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3522 Description Gi ...
- Codeforces Round #192 (Div. 1) A. Purification 贪心
A. Purification Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/329/probl ...
- C#实现对Word文件读写[转]
手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可. 实现方法:首先需要引用VBA组建,我用的是Office2003 Pr ...
- 使用QQ账号的来发送邮件
第一步,看图操作如下: 打开QQ邮箱,在设置-帐户,然后再看下图示: 把:POP3/SMTP服务,IMAP/SMTP服务,Exchange服务,CardDAV/CalDAV服务都选择上,保存这样,便可 ...
- Codeblocks支持C++11
Setting->Compiler 直接在“Have g++ follow the C++11 ISO C++ language standard [-std=c++11]” 选项上打勾 保存就 ...
- Qt Quick实现的疯狂算数游戏
使用 Qt Quick 写了个小游戏:疯狂算数.支持 Windows 和 Android 两个平台. 游戏简单,但牵涉到下面你的 Qt Quick 主题: 自己实现一个按钮 自适应分辨率 国际化 QM ...
- c语言_帮助别人
1. /*4.找出一个二维数组中的鞍点,即该位置上的元素在该行上最大.在该列上最小,也可能没有鞍点*/ #include<stdio.h> int main() { int i,j,max ...
- 从 Auto Layout 的布局算法谈性能
这是使用 ASDK 性能调优系列的第二篇文章,前一篇文章中讲到了如何提升 iOS 应用的渲染性能,你可以点击 这里 了解这部分的内容. http://t.cn/Rc4KbUC 在上一篇文章中,我们提到 ...
- 关于mybatis用mysql时,插入返回自增主键的问题
公司决定新项目用mybatis,虽然这个以前学过但是一直没用过都忘得差不多了,而且项目比较紧,也没时间去系统点的学一学,只好很粗略的百度达到能用的程度就行了. 其中涉及到插入实体要求返回主键id的问题 ...
- C语言第三节关键字、标识符、注释
学习语法之前的提醒 C语言属于一门高级语言,其实,所有高级语言的基本语法组成部分都是一样的,只是表现形式不太一样 就好像亚洲人和非洲人,大家都有人类的结构:2只 手.2只脚.1个头,只是他们外表不太一 ...