面试手撕代码篇:手写模拟SpringBoot核心流程

面试这种场合,大家最怕的就是面试官让我们现场手撕代码,让你写点“平时压根不写”的问题——比如:

手写模拟SpringBoot核心流程

就像领导站在你的背后,让你快点写,但是你却需要百度一下的窘迫。

这不,最近就有小伙伴再面试过程中遇到了这道堪称难得一遇的面试题。

想要回答好这个问题,我们首先要明白面试官想要通过这道题考核我们哪方面的能力

面试官出这道题,其实是想要考核你对SpringBoot框架有没有更深入的了解(比如阅读过源码),顺便考验下你的代码能力。

所以如果我们实在写不出来,也可以把SpringBoot的核心启动流程、自动配置流程说一下,也是很好的加分项

下面小北就通过手写模拟实现一个Spring Boot,让大家能以非常简单的方式就能知道Spring Boot大概是如何工作的

问题背景分析

1. SpringBoot的核心流程有哪些

SpringBoot的核心流程有很多,如下图:

但是在面试过程中,我们肯定不能写出这么多代码,所以我们只需要回答最核心的就行。

SpringBoot最核心流程:

1、手写模拟SpringBoot启动过程
2、手写模拟SpringBoot条件注解功能
3、手写模拟SpringBoot自动配置功能

正文

1、项目搭建

新建一个工程,两个Module,工程结构如下:

springboot模块,表示springboot框架的源码实现
user包,表示用户业务系统,用来写业务代码来测试我们所模拟出来的SpringBoot

首先,SpringBoot是基于的Spring,所以我们要依赖Spring,然后我希望我们模拟出来的SpringBoot也支持Spring MVC的那一套功能,所以也要依赖Spring MVC,包括Tomcat等,所以在SpringBoot模块中要添加以下依赖:

 

xml

代码解读

复制代码

<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.18</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.18</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.18</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>9.0.60</version> </dependency> </dependencies>

然后在User模块下定义相关的Controller和Service:

因为我们模拟实现的是SpringBoot,而不是SpringMVC,所以我直接在user包下定义了UserController和UserService

最终我希望能运行UserApplication中的main方法,就直接启动了项目,并能在浏览器中正常的访问到UserController中的某个方法。

2、核心注解和核心类

我们在真正使用SpringBoot时,核心会用到SpringBoot一个类和注解: 1.@SpringBootApplication,这个注解是加在应用启动类上的,也就是main方法所在的类 2.SpringApplication,这个类中有个run()方法,用来启动SpringBoot应用的 所以我们也来模拟实现他们。

一个@XiaobeiSpringBootApplication注解:

 

java

代码解读

复制代码

/** * 江小北(公众号:程序员江小北) */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Configuration @ComponentScan public @interface XiaobeiSpringBootApplication { }

一个用来实现启动逻辑的XiaobeiSpringApplication类。

 

java

代码解读

复制代码

/** * 在run方法中,我们要实现的逻辑如下: * 1.创建一个Spring容器 * 2.创建Tomcat对象 * 3.生成DispatcherServlet对象,并且和前面创建出来的Spring容器进行绑定 * 4.将DispatcherServlet添加到Tomcat中 * 5.启动Tomcat * @param clazz */ public static void run(Class clazz) { }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值