Spring实战读书笔记(1)

Spring的根本使命是?

简化Java开发

为了降低Java开发的复杂性,Spring采取了哪4种关键策略?

1、基于POJO的轻量级和最小侵入性编程

2、通过依赖注入和面向接口实现松耦合

3、基于切面和惯例进行声明式编程

4、通过切面和模板减少样板式代码

依赖注入与AOP编程

1、如果想对依赖注入有更多的认识,推荐阅读Dhanji R. Prasanna的《Dependency Injection》

2、依赖注入让相互协作的软件组件保持松散耦合,而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件

样板代码

如JDBC、JMS、JNDI和使用REST服务通常会涉及大量的重复代码

Spring容器

并不存在单一的Spring容器,Spring自带了几种容器实现,可以归为两种不同的类型。Bean工厂(bean factories,由org.springframwork.beans.factory.BeanFactory接口定义)是最简单的容器,提供基本的DI支持。应用上下文(application由org.springframework.context.ApplicationContext接口定义),基于BeanFactory之上构建,并提供面向应用的服务,例如从属性文件解析文本信息的能力,以及发布应用事件给感兴趣的事件监听者的能力

虽然我们可以在Bean工厂和应用上下文两者之间任选一种,但Bean工厂对于大多数应用来说往往太低级了,因此应用上下文要比Bean工厂更受欢迎,我们会把精力放在应用上线文中,而不是Bean工厂

使用应用上下文

Spring自带了几种类型的应用上下文,下面罗列了3种是用户最有可能遇到的

1、ClassPathXmlApplicationContext——从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做类资源

2、FileSystemXmlApplicationContext——读取文件系统下的XML配置文件并加载上下文定义

3、XmlWebApplicationContext——读取Web应用下的XML配置文件并装载上下文定义

将Bean加载到Bean工厂

如何使用一个FileSystemXmlApplicationContext

ApplicationContext context = new FileSystemXmlApplicationContext("c:/foo.xml")

如何使用一个ClassPathXmlApplicationContext

ApplicationContext context = new ClassPathXmlApplicationContext ("foo.xml")

是在所有的类路径(包括JAR文件)下查找foo.xml文件

通过现有的应用上下文引用,你可以调用应用上下文的getBean()方法从Spring容器中获取Bean

Bean的生命周期

传统的Java应用,Bean的生命周期很简单。使用Java关键字new进行Bean实例化,然后该Bean就可以被使用了。一旦该Bean不再被使用,则又Java自动进行垃圾回收

Bean装载到Spring应用上下文中的一个典型的声明周期过程

Bean在Spring容器中从创建到销毁经历了若干阶段,每一阶段都可以针对Spring如何管理Bean进行个性化定制

1、Spring对Bean进行实例化

2、Spring将值和Bean的引用注入进Bean对应的属性中

3、如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给SetBeanName()接口方法

4、如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()接口方法,将BeanFactory容器实例传入

5、如果Bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()接口方法,将应用上下文的引用传入

6、如果Bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitialization()接口方法

7、如果Bean实现了InitializingBean接口,Spring将调用它们的afterPropertiesSet()接口方法。类似地,如果Bean使用initMethod声明了初始化方法,该方法也会被调用

8、如果Bean实现了BeanPostProcessor接口,Spring将调用它们的postPoressAfterInitialization()方法

9、此时此刻,Bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁

10、如果Bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果Bean使用destroy-method声明了销毁方法,该方法也会被调用

Spring模块

Spring框架是由几个不同模块所构成的。当我们下载Spring并解压缩后,在dist目录下你会看到20个不同的JAR文件,如下图

组成Spring的这20个JAR文件依据其所属功能可以划分为6个不同的功能模块

如下图

总体而言,这6个模块为开发企业级应用提供了所需的一切,但是你也不必将应用建立在整个Spring框架之上,你可以自由地选择合适自身应用需求的Spring模块;当Spring不能满足需求时,完全可以考虑其他选择。事实上,Spring甚至还集成了其他第三方框架和类库,你可以自由的使用

核心Spring容器

容器是Spring框架最核心的部分,它负责Spring应用中的Bean的创建、配置和管理。在该模块中,你会发现Spring的Bean工厂提供了依赖注入。在Bean工厂之上,你会发现几种Spring应用上下文的实现,每一种提供了配置Spring的不同方式

除了Bean工厂和应用上下文,该模块也提供了许多企业服务,例如邮件、JNDI访问、EJB集成和调度

正如你所看到的,所有的Spring模块都构建于核心容器之上。当配置应用时,其实隐式使用了这些类。

Spring的AOP模块

在AOP的模块中,Spring对面向切面编程提供了丰富的支持。这个模块是Spring应用系统开发切面的基础。与依赖注入一样,AOP可以帮助应用对象解耦。借助于AOP,可以将遍布应用的关注点(例如事务和安全)从它们所应用的对象中解耦出来

数据访问与集成

使用JDBC编写代码通常会导致大量的样板代码,例如获得数据库连接、创建语句、处理结果集到最后关闭数据连接。Spring的JDBC和DAO(data access objects)模块封装了这些样板式代码,使我们的数据库代码变得简单明了,还可以避免因为释放数据库资源失败而引发的问题。该模块在几种数据库服务的错误信息之上构建了一个语义丰富的异常层,以后我们再也不需要解释那些晦涩专有的SQL错误信息了

Spring为那些喜欢ORM(object-relational mapping) 工具的开发者提供了ORM模块。Spring的ORM模块建立在对DAO的支持上,并为某些ORM框架提供了一种构建DAO的简便方式。Spring没有尝试去创建自己的ORM解决方案,而是对许多流行ORM框架进行集成,包括Hibernate、Java Persisternce API、JDO和iBATIS。Spring的事物管理支持所有的ORM框架以及JDBC

本模块同样包含了在JMS之上构建的Spring抽象层,使用消息以异步的方式与其他应用集成。从Spring3.0开始,本模块还包含了对象到XML映射的特性,它最初是Spring Web Service项目的一部分

除此之外,本模块使用Spring AOP模块为Spring应用中的对象提供事务管理服务

Web和远程调用

MVC模式已经被普遍的接受为一种构建Web应用的方法,它有助于将用户界面逻辑与应用逻辑分离。Java从来不缺少MVC框架,Apache的Struts、JSF、WebWork个Tapestry都是流行的MVC框架

最然Spring集成了多种流行的MVC框架,但它的Web和远程调用模块自带了一个强大的MVC框架,有助于应用提升Web层技术的松耦合。该框架提供了两种形式:面向传统Web应用的基于Servlet的框架和面向使用Java Porlet API的基于Portlet的应用

除了面向用户的Web应用,该模块还提供了构建于其他应用交互的几种远程调用的选择。Spring远程调用服务集成了RMI、Hessian、Burlap、JAX-WS,同时Spring还自带了一个远程跳动框架:HTTP invoker

测试

鉴于开发者自测的重要性,Spring提供了测试模块来测试Spring应用

通过该模块,你会发现Spring为JNDI、Servlet和Portlet编写单元测试提供了一系列的模拟对象实现。对于集成测试,该模块为加载Spring应用上下文中Bean的集合以及与Spring上下文中的Bean进行交互提供了支持

Spring Protfolio

当谈到Spring时,它远远超出了我们的想象。事实上,Spring远不止Spring框架所带来的那些。如果仅仅停留在核心的Spring框架上,我们将错过庞大的Spring Portfoliot所提供的丰富财富。整个Spring Portfolio包括多个构建于核心Spring框架智商的框架和类库。概括地说,整个Spring Portfolio几乎为每一个领域的Java开发都提供了Spring编程模型

Spring Web Flow

Spring Web Flow建立于Spring MVC框架之上并为基于流程的会话式Web应用(想想购物车,或者向导)提供支持。Spring Web Flow的主页(http://www.springsource.org/webflow)

Spring Web Service

虽然核心的Spring框架提供了将Spring Bean以声明的方式发布为Web Service

但是这些服务基于一个具有争议性的框架 (拙劣的契约置后模型)之上而构建的。这些服务的契约由Bean的接口来决定。Spring Web Service提供了契约优先的Web Service模型,服务的实现都是为了满足服务的契约而编写的

主页:http://static.springsource.org/spring-ws/sites/2.0

Spring Security

安全对于许多应用都是一个非常关键的切面。利用Spring AOP,Spring Security为Spring应用提供了声明式的安全机制

主页:http://static.springsource.org/spring-security/site

Spring Integration

许多企业级应用都需要与其他应用进行交互。Spring Integration提供了几种通用的应用集成模式的Spring声明式风格的实现

Spring Integration的相关书籍<Spring Integration in Action>

主页:http://www.springsource.org/spring-integration

Spring Batch

当我们需要对数据进行大量操作时,没有任何技术可以比批量处理更能胜任此场景的。如果需要开发一个批处理应用,你可以借助于Spring强大的面向POJO的编程模型来使用Spring Batch来实现

Spring Batch相关书籍<Spring Batch in Action>

主页:http://www.springsource.org/spring-batch

Spring Social

社交网络是互联网然然升起的一颗新星,越来越多的应用正在融入社交网络网站,例如Facebook或者Twitter。如果对此感兴趣,你可以了解下Spring Social,Spring的一个社交网络扩展模块

主页:http://www.springsource.org/spring-social

时间: 2024-10-12 06:47:50

Spring实战读书笔记(1)的相关文章

R实战读书笔记四

第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括如下. 一图胜千字,人们从视觉层更易获取和理解信息. 图形工作 R具有非常强大的绘图功能,看下面代码. > attach(mtcars) > plot(wt, mpg) > abline(lm(mpg~wt)) > title("Regression of MPG on Weight") > detach(m

JAVA并发编程实战 读书笔记(二)对象的共享

<java并发编程实战>读书摘要 birdhack 2015年1月2日 对象的共享 JAVA并发编程实战读书笔记 我们已经知道了同步代码块和同步方法可以确保以原子的方式执行操作,但一种常见的误解是,认为关键之synchronized只能用于实现原子性或者确定临界区.同步还有另一个重要的方面:内存可见性. 1.可见性 为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制. 在没有同步的情况下,编译器.处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整.在缺乏足够同步的多线程程

spring揭秘 读书笔记 二 BeanFactory的对象注冊与依赖绑定

本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Provider提供两个功能对象的创建,依赖关系的管理. 只是,IoC容器这个词中,我们还得关注容器二字.它还包括了一些别的功能,例如以下图 Spring提供了两种类型的容器,各自是BeanFactory与ApplicationContext. 它们的差别在于: BeanFactory:对于它所管理的bean,採

spring揭秘 读书笔记 一

本文是王福强所著<<spring揭秘>>一书的读书笔记 ioc的基本概念 一个例子 我们看下面这个类,getAndPersistNews方法干了四件事 1 通过newsListener获得所有的新闻id; 2 通过newsListener,用新闻id获得新闻实体 3 用newPersistener存储新闻实体 4 再使用newsListener发布新闻 public class FXNewsProvider { private IFXNewsListener newsListene

spring揭秘 读书笔记 二

本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Provider提供两个功能对象的创建,依赖关系的管理. 不过,IoC容器这个词中,我们还得关注容器二字.它还包含了一些别的功能,如下图 Spring提供了两种类型的容器,分别是BeanFactory与ApplicationContext. 它们的区别在于: BeanFactory:对于它所管理的bean,采取的

Spring3.x企业开发应用实战读书笔记 —— 第三章IoC容器概述

声明:    本篇博客绝大多数内容为<Spring3.x企业开发应用实战>一书原内容,所有版权归原书作者所有!,仅供学习参考,勿作他用! 3.2 相关Java基础知识 Java语言允许通过程序化的方式间接对Class对象实例操作,Class文件由类装载器装在后,在JVM(Java虚拟机)中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息: 如构造函数.属性和方法等.Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能,这就为使用程

机器学习实战读书笔记(三)决策树

3.1 决策树的构造 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型和标称型. 一般流程: 1.收集数据 2.准备数据 3.分析数据 4.训练算法 5.测试算法 6.使用算法 3.1.1 信息增益 创建数据集 def createDataSet(): dataSet = [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, '

R语言实战读书笔记(二)创建数据集

2.2.2 矩阵 matrix(vector,nrow,ncol,byrow,dimnames,char_vector_rownames,char_vector_colnames) 其中: byrow=TRUE/FALSE,表示按行填充还是按列填充,默认情况下是按列填充 2.2.4 数据框 1.attach,detach()和with() attach():将数据框加入搜索路径 detach():将数据框移除出搜索路径 with():赋值仅在括号内有效,如果想在括号外生效也可以,用<<- 2.

机器学习实战读书笔记(二)k-近邻算法

knn算法: 1.优点:精度高.对异常值不敏感.无数据输入假定 2.缺点:计算复杂度高.空间复杂度高. 3.适用数据范围:数值型和标称型. 一般流程: 1.收集数据 2.准备数据 3.分析数据 4.训练算法:不适用 5.测试算法:计算正确率 6.使用算法:需要输入样本和结构化的输出结果,然后运行k-近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理. 2.1.1 导入数据 operator是排序时要用的 from numpy import * import operato