一 Spring的简史
第一个阶段:xml配置
Spring 1.x时代,使用Spring开发满眼都是xml配置的Bean,随着项目的扩大,需要把xml配置文件分散到不同的配置文件,那个时候需要频繁地在开发的类和配置文件之间切换。
第二个阶段:注解配置
Spring 2.x时代,随着JDK 1.5带来的注解支持,Spring提供了声明Bean的注解(如@Component、@Service),大大减少了配置量。此时Spring的圈子里存在一种争议:注解配置和xml配置到底哪个好?我们最终选择的是基本配置(如数据库配置)用xml,业务配置用注解。
第三个阶段:Java配置
从Spring 3.x到现在,Spring提供了Java配置的能力,使用Java配置可以让我们更好的理解我们配置的Bean。我们目前刚好处于这个时代,Spring 4.x和Spring Boot都推荐使用Java配置。
二 Spring概述
Spring框架是一个轻量级的企业开发的一站式解决方案。Spring可以解决Java EE开发的所有问题。Spring框架主要提供Ioc容器、AOP、数据访问、Web开发、消息、测试等相关技术支持。
Spring使用简单的POJO来进行企业级开发。每一个被Spring管理的Java对象都称之为Bean;而Spring提供了一个IoC容器用来初始化对象,解决对象间的依赖管理和对象的使用。
三 Spring模块
-
核心容器:核心容器包括spring-core, spring-beans,spring-context, spring-context-support, 和spring-express。spring-core和spring-beans模块提供框架的基础部分,包括控制反转和依赖注入。BeanFactory是一个复杂的工厂模式的实现。上下文(spring-context)模块建立在Core和Bean模块的基础之上:它提供了一种框架风格来访问对象,类似于JNDI注册表。Context模块继承了Bean模块的特点并增加了对国际化、事件传播、资源加载等的支持。ApplicationContext接口是Context模块的焦点。spring-context-support支持将第三方库集成到Spring应用中,例如缓存,JavaMail、模板引擎等。spring-expression模块为运行时查询和操作对象提供了强大的表达式语言,它是JSP2.1中的EL语言的扩展,这种语言支持设置和获取属性值,属性赋值,方法调用,访问数组,逻辑和算术运算符,还支持列表投影、选择和常见的聚合。
-
面向切面:Spring的AOP封装包提供了符合AOP Alliance规范的面向切面的编程实现,让你可以定义,例如方法拦截器和切点,从逻辑上讲,减弱代码的功能耦合,清晰的被分离开。
-
消息传送:Spring FrameWork 4包括一个spring-messaging模块,它是从Spring集成项目的关键抽象,如Message, MessageChannel,MessageHandle。该模块该包含一组注释映射消息的方法,类似Spring MVC基于注释的编程模型。
-
Web:包括spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet模块。spring-web模块提供基础的针对web开发的集成特性,包括文件上传功能、利用Servlet侦听器进行IOC容器初始化和针对web的应用上下文。它还包括一个HTTP客户端和Spring的web部件的远程支持。spring-webmvc模块包括Spring的MVC模型和REST Web服务实现的web应用程序,Spring的MVC框架提供了一种清晰的分离模型,在领域模型代码和web form之间,并且还可以借助Spring框架的其他特性。
-
数据访问/集成:这一层包括JDBC、ORM、OXM、JMS和事务模块。spring-jdbc模块提供了一个JDBC抽象层从而消除了令人乏味的JDBC编程和解析数据库提供商特定的错误。spring-tx模块支持类的编程和声明式事务管理,实现特殊的接口和你的POJO(Plain Old Java Objects)。spring-orm模块提供了流行的对象-关系映射集成层API,包括JPA、JDO和Hibernate。使用spring-orm模块可以使这ORM框架结合Spring提供的其他特性,比如前面提到的简单的声明式事务管理。spring-oxm模块提供了一个抽象层,支持对象/XML映射的实现,如JAXB、 Castor、XMLBeans、 JiBX和XStream.
-
测试层:spring-test模块支持单元测试和包含Junit或者TestNG的集成测试,它提供了Spring的ApplicationContext一致性装载和这些上下文的缓存机制,它还提供了可用于测试代码隔离的模拟对象。
四 Spring的生态
Spring发展到现在已经不仅仅是Spring框架本身的内容,Spring目前提供了大量的基于Spring的项目,可以用来降低我们的开发难度,提高开发效率。
Spring生态的主要项目:
-
Spring Boot:一站式快速开发解决项目。
-
Spring Cloud:提供对分布式系统的支持。
-
Spring Data:提供对主流的关系型及NOSQL型数据库的封装支持。
-
Spring Security:支持系统授权、认证的支持。
-
Spring Session:提供对session管理的支持。
-
Spring Batch:提供对大数据的批处理简化处理优化的支持。
-
Spring Social:提供对社交网络API的集成,如FACEBOOK、新浪微博等。
-
Spring AMQP:提供对AMQP的消息支持。
-
Spring LDAP:提供并简化使用LDAP的支持。
-
Spring XD:用来简化对大数据应用开发。
-
Spring Integration:通过消息机制对企业集成模式EIP的支持。
-
Spring Mobile:支持对手机设备检测等功能。
-
Spring for Android:提供在安卓平台消费restful api的支持。
-
Spring Web Flow:基于spring mvc提供对向导流程式的开发。
-
Spring Web Services:提供基于SOAP/Web协议服务支持。