spring的基本理念就是简化Java开发,spring采取了一下4种关键策略:
- 基于POJO的轻量级和最小侵入性编程;
- 通过依赖注入和面向接口编程实现松耦合;
- 基于切面和惯例进行声明式编程;
- 通过切面和模板减少样板式代码。
第一章 Spring之旅
1.1 Spring容器
- 在基于Spring的应用中,应用对象生存于Spring容器中。Spring容器创建对象,装配它们,配置它们,管路它们的整个生命周期。
- Spring自带了几种容器实现,可以归为两种不同的类型。Bean工厂(由org.springframework.beans.factory.BeanFactory接口定义)是最简单的容器,提供基本的DI(依赖注入Dependency Injection)支持。应用上下文(由org.springframework.context.ApplicationContext接口定义)基于BeanFactory之上构建,并提供面向应用的服务,例如从属性文件解析文本信息的能力,以及发布应用时间给感兴趣的时间监听者的能力。
1.2 Spring应用上下文和模块
1.2.1 Spring常用的3种应用上下文(第七章)
应用上下文 | 说明 |
---|---|
ClassPathXmlApplicationContext | 从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当作类资源 |
FileSystemXmlApplicationContext | 读取文件系统下的XML配置文件并加载上下文定义 |
XmlWebApplicationContext | 读取Web应用下的XML配置文件并装载上下文定义 |
加载应用上下文举例:
//从文件系统中加载应用上下文
ApplicationContext context = new FileSystemXmlApplicationContext("c:/applicationContext.xml");
//从类路径(包含JAR文件)下加载应用上下文
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//加载上下文,并访问bean
ApplicationContext ctx = new ClassPathXmlApplicationContext("com/spring/springdemo/bean/springidol/spring-idol.xml");
<!-- duke是在spring-idol.xml文件中配置的一个实现了Performer接口的类的bean -->
Performer performer = (Performer)ctx.getBean("duke");
performer.perform();
1.2.2 Spring模块
- 核心Spring容器
- 容器是Spring框架最核心的部分,它负责Spring应用中的Bean的创建、配置和管理。在该模块中,Bean工厂提供依赖注入(第二章),应用上下文提供了配置Spring的不同方式。该模块也提供了例如邮件、JNDI访问、EJB继承和调度等许多企业服务。
- Spring的AOP模块
- 在AOP模块(第4章)中,Spring对面向切面编程提供了丰富的支持。借助AOP,可以将遍布应用的关注点(例如事务和安全)从他们所应用的对象中解耦出来。
- 数据访问与集成
- 使用JDBC编写代码通常会导致大量的样板式代码。Spring的JDBC和DAO(data access objects)模块封装了这些样板式代码,使我们的数据库代码鞭策简单明了,还可以避免因为释放数据库资源失败而引发的问题。
- Spring提供了ORM(object-relational mapping)模块。对许多流行的ORM框架进行了集成,Spring的事务管理(第6章)支持所有的ORM框架以及JDBC。
- 本模块同样包含了在JMS之上构建的Spring抽象层,使用消息以异步的方式与其他应用集成。
- Web和远程调用
- Spring集成了多种流行的MVC框架(第七章),但它的Web和远程调用模块自带了一个强大的MVC框架。该框架提供了两种形式:面向传统Web应用的基于Servlet的框架和面向使用Java Portlet API的基于Portlet的应用。
- 除了面向用户的Web应用,该模块还提供了构建与其他应用交互的几种远程调用的选择。Spring远程调用服务(第10章)集成了RMI、Hessian、Burlap、JAX-WS,同时Spring还自带了一个远程调用框架:HTTP invoker。
1.3 Spring的新特性
1.3.1 Spring2.5新特性
Spring2.5的重大意义在于拥抱注解驱动开发,Spring2.5之前的版本都是采用基于XML的配置。Spring2.5引入了几种使用注解额方式,显著减少了配置Spring所需要的XML信息。
- 使用@Autowired实现基于注解驱动的依赖注入和使用@Qualifier实现细粒度的自动装配(auto-wiring)控制。
- 支持JSR-250注解,包括支持命名资源依赖注入的@Resource,以及对生命周期方法支持的@PostConstruct和@PreDestory。
- 自动扫描使用@Component注解(或其他构造型注解)所标注的Spring组件。
- 一个全新的基于注解驱动的SpringMVC编程模型。
- 基于JUnit4和注解的一个新的集成测试框架。
- 完全支持Java 6和Java EE 5。
- 通过Bean的名字来编程切面的新的Bean命名切入点表达式。
- 内嵌支持AspectJ的类加载器织入。
- 新的XML命名空间,包括配置应用上下文细节的context命名空间和配置消息驱动Bean的jms命名空间。
- 支持在SqlJdbcTemplate中使用命名参数。
1.3.2 Spring3.0新特性
从3.0版本开始,Spring要求java 5或更高版本,不再支持Java 4。
- Spring MVC 全面支持Rest,Spring MVC 控制器响应REST风格的URL并返回XML、JSON、RSS或者其他适宜的响应。(第11章)。
- 新的表达式语言把Spring的依赖注入带入了一个新的高度,允许注入各种来源,包含其他Bean和系统属性。(第2章)
- Spring MVC 新的注解,包含@CookieValue和@RequestHeader,分别从Cookie和请求头中获取值。(第7章)
- 一个新的XML命名空间,用来减少Spring MVC 配置。
- 支持基于JSR-302注解的声明式校验。
- 支持新的JSR-330依赖注入规范。
- 通过注解驱动声明异步和调度方法。
- 一个新的注解驱动的配置模型,几乎可以避免使用XML进行Spring配置。(第2章)
- Spring Web Service 项目的OXM功能已被迁移到Spring框架核心。
1.3.4 Spring Portfolio
Spring远不止Spring框架所带来的那些功能。整个Spring Portfolio包括多个构建于核心Spring框架之上的框架和类库。概括地说,整个Spring Portfolio几乎为每一个领域的Java开发都提供了Spring编程模型。