Spring的根本使命是?web
简化Java开发spring
为了下降Java开发的复杂性,Spring采起了哪4种关键策略?数据库
1、基于POJO的轻量级和最小侵入性编程编程
2、经过依赖注入和面向接口实现松耦合安全
3、基于切面和惯例进行声明式编程网络
4、经过切面和模板减小样板式代码app
依赖注入与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