1. 课前准备
心态
- 戒骄戒躁
- 谨慎豁达
- 如履薄冰
方法
基础:夯实基础,了解动态
思考:保持怀疑,验证一切
分析:不拘小节,观其大意
实践:思辨结合,学以致用
工具
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.x | 1.3+ | J2EE1.3+ |
2.x | 1.4.2+ | J2EE1.3+ |
3.x | 5+ | J2EE1.4和Java EE5 |
4.x | 6+ | Java EE 6和7 |
5.x | 8+ | 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 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支持版本 | 代表实现 |
---|---|---|
接口@Override | 4.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 Beans | 1.0+ | CacheIntrospectionResults |
动态代理(Dynamic Proxy) | 1.0+ | JdkDynamicAopProxy |
- Java 5 API
API类型 | Spring支持版本 | 代表实现 |
---|---|---|
XML处理(DOM,SAX...) | 1.0+ | XmlBeanDefinitionReader |
Java管理扩展(JMX) | 1.2+ | @ManagedResource |
Instrumentation | 2.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 |
- 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.2 | DispatherPortlet |
SOAP(JSR 067) | 2.5+ | SoapFaultException |
WebServices(JSR 109) | 2.5+ | CommonAnnotationBeanPostProcessor |
WebSocket(JSR 356) | 4.0 | WebSocketHandler |
- Java EE 数据存储相关
JSR规范 | Spring支持版本 | 代表实现 |
---|---|---|
JDO(JSR 12) | 1.0 - 4.2 | JdoTemplate |
JTA(JSR 907) | 1.0+ | JtaTransactionManager |
JPA(EJB 3.0 JSR 220的成员) | 2.0 | JpaTransactionManager |
Java Caching API(JSR 107) | 3.2+ | JCacheCache |
- Java EE Bean技术相关
JSR规范 | Spring支持版本 | 代表实现 |
---|---|---|
JMS(JSR 914) | 1.1+ | JmsTemplate |
EJB2.0(JSR 19) | 1.0 | AbstractStatefulSessionBean |
Dependency Inject for Java(JSR 330) | 2.5 | AutowiredAnnotationBeanPostProcessor |
Bean Validation(JSR 303) | 3.0 | LocalValidationFactoryBean |
8. Spring 编程模型
- 面向对象编程
契约接口:Aware、BeanPostProcessor ...
设计模式:观察者模式、组合模式、模板模式 ...
对象继承:Abstract* 类
- 面向切面编程
动态代理:JdkDynamicAopProxy
字节码提升:ASM、CGLib、AspectJ ...
- 面向元编程
注解:模式注解(@Component、@Service、@Respository)
配置:Environment抽象、PropertySources、BeanDefinition ...
泛型:GenericTypeResolver、ResolvableType ...
- 函数驱动
函数接口:ApplicationEventPublisher
Reactive: Spring WebFlex
- 模块驱动
Maven Artifacts
OSGI Bundles
Java9 Automatic Modules
Spring @Enable*
9. Spring 核心价值
生态系统
- Spring Boot
- Spring Cloud
- Spring Security
- Spring Data
- 其他
API抽象设计
- AOP抽象
- 事务抽象
- Environment抽象
- 生命周期
编程模型
内容同上一节
设计思想
- Object Oriented Programming(OOP)
- IoC/DI
- Domain-Driven Development(DDD)
- Test-Driven Development(TDD)
- Event-Driven Programming(EDP)
- Functional Programming(FP)
- ...
设计模式
-
专属模式
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 -
传统 GoF 23
用户基础
- Spring Framework
- Spring Boot
- Spring Cloud
传统用户
- Java SE
- 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.
996面试题 - Spring Framework有哪些核心模块?
- spring-core: Spring 基础API模块,如资源管理,泛型处理
- spring-beans: Spring Bean 相关,如依赖查找,依赖注入
- spring-aop: Spring AOP处理,如动态代理,AOP字节码提升
- spring-context: 事件驱动、注解驱动,模块驱动等
- spring-expression: Spring 表态式语言模块
劝退面试题 - Spring Framework 优势和不足是什么
这个问题的回答将贯穿整个系列