# lu-spring-understand **Repository Path**: ShowLuu/lu-spring-understand ## Basic Information - **Project Name**: lu-spring-understand - **Description**: 小马哥的视频&看书&个人实战 --- 总结 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-27 - **Last Updated**: 2021-06-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、帮助 - 资源相关 - [JSR官方地址](http://jcp.org/) - [小马哥JSR收藏](https://github.com/mercyblitz/jsr) - [Spring官方文档根路径](https://docs.spring.io/spring/docs) - [小马哥项目参考地址](https://gitee.com/geektime-geekbang/geekbang-lessons) - 源码阅读技巧: - 查看文档:mac => ctrl + j;windows => ctrl + q - 查看类层级关系:ctrl + h - 类图:option + command + u - 类结构:command + f7 # 二、Spring Framework总览 ## 1、核心特性 ### (1) Ioc容器(Ioc Container) ### (2) Spring事件(Events) ### (3) 资源管理(Resources) ### (4) 国际化(i18n) ### (5) 校验(Validation) ### (6) 数据绑定(Data Binding) ### (7) 类型转换(Type Conversion) ### (8) Spring表达式(Spring Express Language) ### (9) 面向切面编程(AOP) ## 2、数据存储 ### (1) JDBC ### (2) 事务抽象(Transactions) ### (3) DAO支持(Dao Support) ### (4) O/R映射(O/R Mapping) ### (5) XML编列(XML Marshalling) ## 3、Web技术 ### (1) Web Servlet 技术栈 #### 1>. Spring MVC #### 2>. WebSocket #### 3>. SockJS ### (2) Web Reactive技术栈 #### 1>.Spring WebFlux #### 2>.WebClient #### 3>.WebSocket ## 4、技术整合 ### (1) 远程调用(Remoting) ### (2) 消息服务(JMS) ### (3) 连接架构(JCA) ### (4) 管理拓展(JMX) ### (5) 邮件客户端(Email) ### (6) 本地任务(Tasks) ### (7) 本地调度(Scheduling) ### (8) 缓存抽象(Caching) ### (9) Spring测试(Testing) #### 1>.模拟对象 #### 2>.TestContext框架 #### 3>.Spring MVC测试 #### 4>.Web测试客户端 ## 5、版本特性 ![image-20210626223558293](./note-images/image-20210626223558293.png) ## 6、模块化设计 ![image-20210626224039937](./note-images/image-20210626224039937.png) ## 7、对Java语言特性的运用 ![image-20210626224722528](./note-images/image-20210626224722528.png) ![image-20210626225726200](./note-images/image-20210626225726200.png) ![image-20210626225001543](./note-images/image-20210626225001543.png) ![image-20210626225137789](./note-images/image-20210626225137789.png) ![image-20210626225235382](./note-images/image-20210626225235382.png) ## 8、对JDK API实践 ![image-20210626230443232](./note-images/image-20210626230443232.png) ![image-20210626230506245](./note-images/image-20210626230506245.png) ![image-20210626230638358](./note-images/image-20210626230638358.png) ![image-20210626230949748](./note-images/image-20210626230949748.png) ![image-20210626231024273](./note-images/image-20210626231024273.png) ## 9、对Java EE API整合 ![image-20210626231231326](./note-images/image-20210626231231326.png) ![image-20210626231541317](./note-images/image-20210626231541317.png) ![image-20210626231716883](./note-images/image-20210626231716883.png) ## 10、编程模型 ![image-20210626232556182](./note-images/image-20210626232556182.png) ## 11、核心价值 ![](./note-images/Spring-core-value.png) ![](./note-images/Spring-core-features.png) ## 12、面试题精选 ### (1) Spring Framework 有哪些核心模块 - spring-core:spring基础API模块,如资源管理`Resource`,范型处理`GenericTypeResolver` - spring-beans:bean相关,如依赖查找`BeanFactory`,依赖注入`AutowiredAnnotationBeanPostProcessor` - spring-aop:aop处理,如动态代理,AOP字节码提升`AopProxy` - spring-context:事件驱动`ApplicationEvent`、注解驱动`Component`、模块驱动`EnableCaching`等 - Spring-expression:spel表达式语言模块 ### (2) Spring Framework 优势和不足 - 优势: - 不足: # 三、重识Ioc ## 1、发展简介 - 控制反转,好莱坞原则(),不是主动拉取,推的方式,上层推给你,而不是下层拉取上层 ## 2、主要实现策略 (1) 服务定位模式,JNDI技术(Java Naming and Directory Interface Java命名和目录接口) - 间接的查找,说白了就是,要想使用某个资源,不是直接使用,而是把资源起个别名,之后根据别名来找到该资源,不需要关心具体的细节) (2) 依赖注入 - 构造器注入 - 参数注入 - Setter注入 - 接口注入 (3) 依赖查找 (4) 模版方法的设计模式 (5) 策略模式 ## 3、容器的职责 (1) 实现与执行的任务之间解耦 (2) 关注最终目标,不需要关注具体实现,依赖于某个契约,约定 (3) 依赖处理:依赖查找、依赖注入 (4) 生命周期管理:容器、托管的资源(Java Beans或其他资源) (5) 配置:容器、外部化配置、托管的资源(Java Beans或其他资源) ## 4、容器的实现 (1) Java SE - Java Beans - Java ServiceLoader SPI - JNDI (Java Naming and Directory Interface Java命名和目录接口) (2) Java EE - EJB(Enterprise Java Beans) - Servlet (3) 开源 - Apache Avalon - PicoContainer - Google Guice - Spring Framework ## 5、传统Ioc容器的实现 (1) JavaBeans作为Ioc容器 (2) 特性 - 1.依赖查找 - 2.生命周期管理 - 3.配置元信息 - 4.时间 - 5.自定义 - 6.资源管理 - 7.持久化 (3) 规范 - JavaBeans - BeanContext ## 6、轻量级Ioc容器 - 管理应用代码,并不是代码的托管工具,不像git或svn,可以管理代码的运行,生命周期,启动与停止 - 能够快速启动 - 不需要一些特殊的配置进行操作,EJB部署时,需要大量的XML配置文件,轻量级Ioc容器不需要大量的依赖API - 可管控对象 - 好处: - 代码与实现的解耦合,分离的思想 - 代码的复用 - 更大程度上的面向对象 - 更大化的产品化,提升效率,有响应的运维管理工具 ## 7、依赖查找 VS 依赖注入 ![image-20210627212142242](./note-images/image-20210627212142242.png) - 依赖查找:主动从容器里面获取beans - 依赖注入:初始化bean时,容器自动注入 ## 8、构造器注入 VS Setter注入 - Setter注入,可配置化的,例如,springboot yml配置属性注入 - 构造器注入,避免bean被修改,就是创建bean的时候注入 ## 9、面试题精选 - 什么事Ioc? - 反转控制,类似于好莱坞原则(你不要找我们,我们来找你),主要有依赖查找和依赖注入(构造器注入和Setter注入)实现 - 依赖查找和依赖注入的区别? - 依赖查找事主动或者手动的风格是查找,需要依赖容器或者标准API(JNDI API)实现 - 依赖注入事手动或者自动依赖绑定的方式,不需要依赖特定的容器和API - Spirng做Ioc容器有什么优势? - Ioc容器管理,依赖注入和依赖查找 - AOP抽象 - 事务抽象 - 事件机制 - SPI扩展 - 强大的第三方整合 - 容易测试 - 代码的复用,更好的面向对象