1. 课前准备

心态

  1. 戒骄戒躁
  2. 谨慎豁达
  3. 如履薄冰

方法

基础:夯实基础,了解动态
思考:保持怀疑,验证一切
分析:不拘小节,观其大意
实践:思辨结合,学以致用

工具

JDK: Oracle JDK 8
Spring Framework: 5.2.2.RELEASE
IDE: IntelliJ IDEA 2019 (Community)
Maven: 3.2+

2. Spring 特性总览

核心特性(Core)

IoC 容器(IoC Container)

Spring 事件(Events)

资源管理(Resources)

国际化(i18n)

校验(Validation)

数据绑定(Data Binding)

类型转换(Type Conversion)

Spring 表达式(Spring Express Language)

面向切面编程(AOP)

数据存储(Data Access)

JDBC

事务抽象

面试必考

DAO 支持(DAO Support)

O/R 映射(O/R Mapping)

XML 编列(XML Marshalling)

类似 Java 序列化和反序列化

Web 技术(Web)

Web Servlet 技术

  • Spring MVC
  • WebSocket
  • SockJS

Web Reactive 技术栈

Spring 5 引入

  • Spring WebFlux
  • WebClient
  • WebSocket

技术整合

远程调用(Remoting)

Java 消息服务(JMS)

Java 连接架构(JCA)

Java 管理扩展(JMX)

Java 邮件客户端(Email)

本地任务(Tasks)

这里是单机版。

本地调试(Scheduling)

缓存抽象(Caching)

Spring 测试(Testing)

模拟对象(Mock Objects)

TestContext框架(TestContext Framework)

Spring MVC 测试(Sprint MVC Test)

Web 测试客户端(WebTestClient)

3. Spring 版本特性

Spring Framework版本Java标准版本Java企业版本
1.x1.3+J2EE1.3+
2.x1.4.2+J2EE1.3+
3.x5+J2EE1.4和Java EE5
4.x6+Java EE 6和7
5.x8+Java EE7

4. Spring 模块化设计

  • spring-aop
  • spring-aspects
  • spring-context-indexer
  • spring-context-support
  • spring-context
  • spring-core
  • spring-expression
  • spring-instrument
  • spring-jcl
  • spring-jdbc
  • spring-jms
  • spring-messaging
  • spring-orm
  • spring-oxm
  • spring-test
  • spring-tx
  • spring-web
  • spring-webflux
  • spring-webmvc
  • spring-websocket

5. Spring 对 Java 语言特性用

Java语法变化

  • Java 5语法特性
语法特性Spring支持版本代表实现
注解(Annotation)1.2+@Transactional
枚举(Enumeration)1.2+Propagation
for-each语法3.0+AbstractApplicationContext
自动装箱(AutoBoxing)3.0+
泛型(Generic)3.0+ApplicationListener
  • Java 6语法特性
语法特性Spring支持版本代表实现
接口@Override4.0+
  • Java 7语法特性
语法特性Spring支持版本代表实现
Diamond语法5.0+DefaultListableBeanFactory
try-with-resources语法5.0+ResourceBundleMessageSource
  • Java 8语法特性
语法特性Spring支持版本代表实现
Lambda语法5.0+PropertiyEditorRegistrySupport

6. Spring 对 JDK API 实践

  • < Java 5 API
API类型Spring支持版本代表实现
反射(Reflection)1.0+MethodMatcher
Java Beans1.0+CacheIntrospectionResults
动态代理(Dynamic Proxy)1.0+JdkDynamicAopProxy
  • Java 5 API
API类型Spring支持版本代表实现
XML处理(DOM,SAX...)1.0+XmlBeanDefinitionReader
Java管理扩展(JMX)1.2+@ManagedResource
Instrumentation2.0+InstrumentationSavingAgent
并发框架(J.U.C)3.0+ThreadPoolTaskScheduler
格式化(Fromatter)3.0+DateFromatter
  • Java 6 API
API类型Spring支持版本代表实现
JDBC4.0(JSR 221)1.0+JdbcTemplate
Common Annotations(JSR 250)2.5+CommonAnnotationBeanPostProcessor
JAXB 2.0(JSR 222)3.0+Jaxb2Marshaller
Scripting in JVM(JSR 223)4.2+StandardScriptFactory
可插拔注解处理API(JSR 269)5.0+@Indexed
Java Compiler API(JSR 199)5.0+TestCompiler(单元测试)
  • Java 7 API
API类型Spring支持版本代表实现
Fork/Join框架(JSR 166)3.1+ForkJoinPoolFactoryBean
NIO 2(JSR 203)4.0+PathResource
  • Java 8 API
API类型Spring支持版本代表实现
Date and Time API(JSR 310)4.0+DateTimeContext
可重复Annotations(JSR 337)4.0+@PropertySources
Stream API(JSR 335)4.2+StreamConverter
CompletableFuture(J.U.C)4.2+CompletableToListenableFutrueAdapter
  1. Spring 对 Java EE API 整合
  • Java EE Web技术相关
JSR规范Spring支持版本代表实现
Servlet + JSP(JSR 035)1.0+DispatherServlet
JSTL(JSR 052)1.0+JstlView
JavaServer Faces(JSR 127)1.1+FacesContextUtils
Portlet(JSR 168)2.0 - 4.2DispatherPortlet
SOAP(JSR 067)2.5+SoapFaultException
WebServices(JSR 109)2.5+CommonAnnotationBeanPostProcessor
WebSocket(JSR 356)4.0WebSocketHandler
  • Java EE 数据存储相关
JSR规范Spring支持版本代表实现
JDO(JSR 12)1.0 - 4.2JdoTemplate
JTA(JSR 907)1.0+JtaTransactionManager
JPA(EJB 3.0 JSR 220的成员)2.0JpaTransactionManager
Java Caching API(JSR 107)3.2+JCacheCache
  • Java EE Bean技术相关
JSR规范Spring支持版本代表实现
JMS(JSR 914)1.1+JmsTemplate
EJB2.0(JSR 19)1.0AbstractStatefulSessionBean
Dependency Inject for Java(JSR 330)2.5AutowiredAnnotationBeanPostProcessor
Bean Validation(JSR 303)3.0LocalValidationFactoryBean

8. Spring 编程模型

  1. 面向对象编程

契约接口:Aware、BeanPostProcessor ...
设计模式:观察者模式、组合模式、模板模式 ...
对象继承:Abstract* 类

  1. 面向切面编程

动态代理:JdkDynamicAopProxy
字节码提升:ASM、CGLib、AspectJ ...

  1. 面向元编程

注解:模式注解(@Component、@Service、@Respository)
配置:Environment抽象、PropertySources、BeanDefinition ...
泛型:GenericTypeResolver、ResolvableType ...

  1. 函数驱动

函数接口:ApplicationEventPublisher
Reactive: Spring WebFlex

  1. 模块驱动

Maven Artifacts
OSGI Bundles
Java9 Automatic Modules
Spring @Enable*

9. Spring 核心价值

生态系统

  1. Spring Boot
  2. Spring Cloud
  3. Spring Security
  4. Spring Data
  5. 其他

API抽象设计

  1. AOP抽象
  2. 事务抽象
  3. Environment抽象
  4. 生命周期

编程模型

内容同上一节

设计思想

  1. Object Oriented Programming(OOP)
  2. IoC/DI
  3. Domain-Driven Development(DDD)
  4. Test-Driven Development(TDD)
  5. Event-Driven Programming(EDP)
  6. Functional Programming(FP)
  7. ...

设计模式

  1. 专属模式
    1.1 前缀模式
    1.1.1 Enable模式
    1.1.2 Configurable模式
    1.2 后缀模式
    1.2.1 处理器模式
    1.2.1.1 Processor
    1.2.1.2 Resolver
    1.2.1.3 Handler
    1.2.2 意识模式
    1.2.2.1 Aware
    1.2.3 配置模式
    1.2.3.1 Configuror
    1.2.4. 选择器模式
    1.2.4.1 ImportSelector

  2. 传统 GoF 23

用户基础

  1. Spring Framework
  2. Spring Boot
  3. Spring Cloud

传统用户

  1. Java SE
  2. Java EE

10. 面试精选

沙雕面试题 - 什么是Spring Framework

Spring makes it easy to create Java enterprise applications. It provides everything you need to embrace the Java language in an enterprise environment, with support for Groovy and Kotlin as alternative languages on the JVM, and with the flexibility to create many kinds of architectures depending on an application’s needs.

Spring Framework Overview

996面试题 - Spring Framework有哪些核心模块?

  • spring-core: Spring 基础API模块,如资源管理,泛型处理
  • spring-beans: Spring Bean 相关,如依赖查找,依赖注入
  • spring-aop: Spring AOP处理,如动态代理,AOP字节码提升
  • spring-context: 事件驱动、注解驱动,模块驱动等
  • spring-expression: Spring 表态式语言模块

劝退面试题 - Spring Framework 优势和不足是什么

这个问题的回答将贯穿整个系列