第 1 章 Spring 概述
本章主要内容:
- 认识 Spring
- Spring 体系及文档结构
- Spring 4.0 新特性
- Spring 子项目介绍
文章目录
1.1 认识 Spring
Spring 是分层的 Java SE/EE 应用一站式的轻量级开源框架,以 IoC
(Inverse of Control,控制反转) 和 AOP
(Aspect Oriented Programming,切面编程)为内核,提供了展现层 Spring MVC
、持久层 Spring JDBC
及业务层事务管理等一站式的企业级应用技术。
此外还整合了很多第三方框架和类库。
1.2 关于 SpringSource
Spring 创始人创立的一个商业公司,后来被收购并发布了 Spring Framework 4.0 版本。
1.3 Spring 带给我们什么
- 方便解耦,简化开发。
通过 Spring 提供的 IoC 容器来管理对象间的依赖关系,避免过度耦合
- AOP 编程的支持
- 声明式事务的支持
- 方便程序的测试,相对于 EJB 容器
- 方便集成其他框架
- Java 源码是经典的学习范例
1.4 Spring 体系结构
整个框架大致可以划分为 5 个模块:
1. IoC
Spring 核心模块实现了IOC的功能,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由IoC容器负责依赖类之间的创建、拼接、管理、获取等工作。
BeanFacotry接口是Spring框架的核心接口,它实现了容器的许多核心功能。
2. AOP
AOP是进行横切逻辑编程的思想,Spring还整合了AspectJ这种AOP语言级的框架。
3. 数据访问和集成
Spring封装了对各种类型数据的访问操作,如数据库(Oracle、MySQL)、Elasticsearch、Redis等。
首先:在DAO层,建立一套统一的异常体系,将各种访问数据的检查型异常转换为非检查型异常;
其次:通过模板化技术对各种数据访问技术进行薄层封装,将模板化的代码隐藏起来。
这样就简历了和数据形式及访问技术无关的统一的DAO层,借助AOP技术,提供了声明式事务的功能。
4. Web及远程操作
Spring整合了很多著名的框架,如Struts、WebWork等MVC框架,还有WebService和WebSocket技术的支持。
1.5 Spring对Java版本的要求
Spring4.0 —> Java6.0, 全面支持8.0
1.6 Spring4.0新特性
1.6.1 全面支持Java8
Lambda表达式支持,REST风格Web开发,全面支持java8,支持重复注解(多个一模一样的注解)
1.6.2 核心容器增强
- 泛型依赖注入:为子类的成员变量注入泛型类型。
public abstract class BaseService<M extends Serializable> {
@Autowired
protected BaseDao<M> dao;
...
}
@Component
public interface UserDao<User> {
}
@Service
public class UserService extends BaseService<User> {
}
- Map依赖注入
@Autowired
private Map<String, BaseService> map;
上述协防将BaseService
类型的对象注入map中, key是Bean的名字, value是实现了BaseService
类的Bean.
- @Lazy延迟依赖注入
@Lazy
@Service
public class UserService extends BaseService<User> {
}
也可以把@Lazy放在@Autowired之上, 即依赖注入也是可以延时的, 当调用userService时才会注入; 同样适用于@Bean.
- List注入
@Autowired
private List<BaseService> list;
这样可以注入所有实现了BaseService的 Bean 类, 无序的; 如果需要排序:
@Order(value = 1)
@Service
public class UserService extends BaseService<User> {
}
1.6.3 支持用Groovy定义Bean
1.6.4 Web的增强
引入新的@RestController控制器注解, 方便REST开发.
1.6.5 支持WebSocket
1.7 Spring子项目
列举几个: