Spring全套教学资料
Spring是Java程序员的《葵花宝典》,其中提供的各种大招,能简化我们的开发,大大提升开发效率!目前99%的公司使用了Spring,大家可以去各大招聘网站看一下,Spring算是必备技能,所以一定要掌握。
目录:
部分内容:
Spring源码
- 第一部分 Spring 概述
- 第二部分 核心思想
- 第三部分 手写实现 IoC 和 AOP(自定义Spring框架)
- 第四部分 Spring IOC 高级应用
基础特性
高级特性 - 第五部分 Spring IOC源码深度剖析
设计优雅
设计模式
注意:原则、方法和技巧 - 第六部分 Spring AOP 应用
声明事务控制 - 第七部分 Spring AOP源码深度剖析
必要的笔记、必要的图、通俗易懂的语言化解知识难点
脚手框架:SpringBoot技术
它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。
Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。
- SpringBoot入门
- 配置文件
- 日志
- Web开发
- Docker
- SpringBoot与数据访问
- 启动配置原理
- 自定义starter
微服务架构:Spring Cloud Alibaba
同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
- 微服务架构介绍
- Spring Cloud Alibaba介绍
- 微服务环境搭建
- 服务治理
- 服务容错
- 服务网关
- 链路追踪
- ZipKin集成及数据持久化
- 消息驱动
- 短信服务
- Nacos Confifig—服务配置
- Seata—分布式事务
- Dubbo—rpc通信
Spring MVC
目录:
部分内容:
4 case “Java”: return new JavaBook();
5 case “DB”:return new DBBook();
6 //要扩展的话,只能加在这里
7 case “C”:return new CBook();
8 default: return null;
9 }
10 }
11 }
如果要加新类型的书,只能是新加一个case,一旦有修改,那么我们得改动第2行的create方法,这样一来,create方法(乃至BookFactory类)对修改就不关闭了。如果大家对此不理解,可以回顾下工厂模式的案例,当时遇到这个需求,我们是通过添加CFactory类来实现的,原来的BookFactory和DBFactory并没有改动(它们对修改关闭了)。
对比一下两者的差别,由于简单工厂模式没遵循开闭原则,那么一旦添加C语言的书籍,那么就影响到其它不相干的Java和DB书籍了(这两部分的case代码也得随之测试),这也是为什么简单工厂模式适用场景比较少的原因。
3 抽象工厂和一般工厂模式的区别
抽象工厂是对一般工厂模式的扩展,比如我们在写java和数据库方面的书籍时,需要添加录制讲解视频的方法,也就是说,在Java书和数据库书这两个产品里,我们不仅要包含文稿,还得包含视频。
具体到生产Java书和数据库书的这两个工厂里,我们要生产多类产品,不仅得包括文稿,还得包括代码,此时就可以使用抽象模式,示例代码如下。
1 class Video { //视频的基类
2 public Video(){ }
3 }
4 public class JavaVideo extends Video { 省略定义动作 }
5 public class DBBook extends Video { 省略定义动作 }
在第1行里,我们创建了视频的基类,在第4和第5行里,创建了针对Java和数据库书视频的两个类。
6 abstract class CreateBook{ //抽象工厂
7 public abstract Book createBook();//编写文稿
8 public abstract Book createVideo();//录制视频
9 }
10 //具体创建java书的工厂
11 class CreateJavaBook extends CreateBook{
12 public JavaBook createBook() {省略编写文稿的具体动作}
13 public JavaVideo createVideo() {省略录制视频的具体动作}
14 }
15 //具体创建数据库书的工厂
16 class CreateDBBook extends CreateBook{
17 public DBBook createBook() {省略编写文稿的具体动作}
18 public DBVideo createVideo() {省略录制视频的具体动作}
19 }
在第6行里,我们定义了一个抽象工厂,在其中定义了创建视频和书籍的两个方法,在第11和16行,我们通过继承这个抽象工厂,实现了生产两个具体Java和数据库书籍的工厂。
和一般工厂相比,抽象工厂的顶层类一般是抽象类(也就是抽象工厂名称的来源),但和一般工厂模式相比,没有优劣之分,只看哪种模式更能适应需求。比如要在同一类产品(比如书)里生产多个子产品(比如文稿和视频),那么就可以通过抽象工厂模式,而如果需要生产的产品里只有主部件(比如文稿),而不需要附属产品(比如视频),那么就可以用一般工厂模式。
4 再进一步分析建造者模式和工厂模式的区别
建造者模式和工厂模式都是关注于“创建对象”,在面试时,我们一般会问它们的差别。通过工厂模式,我们一般都是创建一个(或一类)产品,而不关心产品的组成部分,建造者模式也是用来创建一个产品,但它不仅创建产品,更专注这个产品的组件和组成过程。
通过下面的代码,我们来看下建造者模式的用法,大家可以对比下建造者和工厂模式的差别。
1 //定义一个待生产的产品,比如带视频讲解的书
2 public class BookwithVideo {
3 //其中包括了稿件和视频两个组件
4 Book PaperBook;
5 Video Video;
6 }
7 //定义一个抽象的建造者
8 public abstract class Builder {
9 public abstract Book createPaperBook();//编写稿件
10 public abstract Video createVideo();//录制视频
11 }
12 //定义一个具体的建造者,用来创建Java书
13 public class JavaBookProduct extends Builder {
14 private BookwithVideo bookWithVideo = new BookwithVideo();
15 //通过这个方法返回组装后的书(稿件加视频)
16 public BookWithVideo getBook(){return bookWithVideo;}
17 //编写稿件
18 public void setPaperBook() {
19 //创造Java文稿,并赋予javaBook对象
20 bookWithVideo.book = javaBook;
21 }
22 //录制视频
23 public void setVideo() {
24 录制Java书的视频,并赋予javaVideo对象
25 bookWithVideo.video = javaVideo;
26 }
27 }
28 //定义一个具体的数据库书籍的建造者
29 public class DBBookProduct extends Builder {
30 private BookwithVideo bookWithVideo = new BookwithVideo();
31 //通过这个方法返回组装后的书(稿件加视频)
32 public BookWithVideo getBook(){return bookWithVideo;}
33 //纸质书
34 public void setPaperBook() {
35 写数据库书的文稿,并赋予dbBook对象
36 bookWithVideo.book = dbBook;
37 }
38 //录制视频
39 public void setVideo() {
40 录制数据库书的视频,并赋予dbVideo对象
41 bookWithVideo.video = dbVideo;
42 }
43 }
在第8行里,我们定义了一个抽象的创造者类Builder,在第13和29这两行里,我们通过继承Builder这个创造者类创建了两个实体创造者,分别用来创造Java和数据库的书籍。
在每一个创造者里,我们通过了setPaperBook方法创造文稿,通过setVideo创建视频,并把创造好的文稿和视频分别赋予bookWithVideo对象里的两个文稿和视频组件。
看到这里,似乎和工厂模式差不多,由于建造者模式会偏重于组件的创建过程,所以会通过如下的总控类来组装对象,而工厂模式偏重于“创建产品“的这个结果,而不关注产品中组装各组件的过程,所以一般不会有总控类。
44 //总控类
45 public class Director {
46 void productBook(Builder builder){
47 builder.setPaperBook();
48 builder.setVideo();
49 }
50 }
在总控类里的第46行里,我们定义了用来创建书的productBook方法,请注意这个方法是抽象的builder类,通过下面的代码,我们能看到如何通过上述定义的总控类和建造者类来动态地创建不同种类的对象。
1 Director director = new Director();
2 Builder javaBookBuild = new JavaBookProduct();
3 Builder dbBookBuilder = new DBBookProduct();
4 director.productBook(javaBookBuild);
5 director.productBook(dbBookBuilder);
在第1行里,我们定义了一个总控类,在第2和第3行里,我们定义了具体的创建Java和数据库书籍的建造者对象,在第4和第5行里,分别传入了javaBookBuilder和dbBookBuilder这两个建造者对象,这样在总控类的productBook方法里,会根据传入参数类型的不同,分别建造java和数据库书籍。
我们经常通过建造者模式来创建项目里的业务对象,所以候选人在他们的项目里一般都会用到这种模式,在面试中也经常听到候选人用这种模式来举例,这里列一种比较好的回答。
第一,这位候选人用电商平台的订单来举例,首先他创建了一个订单的基类,在其中包括了商品列表、总价钱、总积分和发货地址这四个组件。
第二,通过继承这个订单基类,创建了两类订单,分别是“一般用户的订单”和“VIP客户的订单”,它们的算总价和算总积分的业务逻辑是不同的。
第三,定义了一个抽象的建造者对象,在其中定义了诸如“统计商品”和“算总价”等的方法。
第四,通过继承抽象的建造者,定义了两个具体的建造者,分别用来建造“一般订单”和“VIP订单”,在每个具体的建造者对象里,创建商品列表、总价钱、总积分和发货地址,并把它们组装成一个订单。
读者福利
更多笔记分享
img-paiTHqAo-1715430975588)]