SpringBootDay1|面试题
目录
一、springboot框架
1、什么是springboot
2、Spring Boot的主要优点
3、springboot核心注解
5、springboot配置文件
6、springboot 整合 jdbc
二、面试题
1)springmvc的作用
编辑
2)springmvc的核心组件
3)springmvc的内部执行流程
4)@RequestBody注解的作用
5)mvc架构模式
6)properties和yml配置文件的区别
一、springboot框架
spring(IOC、DI、AOP)
springmvc(mvc架构 属于mvc架构的控制层 ) ----> 使用了spring思想
mybatis (jdbc封装,连接数据库 增删改查)
SSM(spring+springmvc+mybatis) 一堆配置文件
spring.xml---->mybatis.xml---->sqlMapper.xml
springmvc.xml
web.xml
自己配置tomca
1、什么是springboot
其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
Spring Boot 以约定大于配置的核心思想,默认帮我们进行了很多设置,多数 Spring Boot 应用只需要很少的 Spring 配置。同时它集成了大量常用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用。
2、Spring Boot的主要优点
- Create stand-alone Spring applications
创建独立Spring应用
- Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
内嵌web服务器
- Provide opinionated 'starter' dependencies to simplify your build configuration
自动starter依赖,简化构建配置
- Automatically configure Spring and 3rd party libraries whenever possible
自动配置Spring以及第三方功能
- Provide production-ready features such as metrics, health checks, and externalized configuration
提供生产级别的监控、健康检查及外部化配置
- Absolutely no code generation and no requirement for XML configuration
无代码生成、无需编写XML
- SpringBoot是整合Spring技术栈的一站式框架,SpringBoot是简化Spring技术栈的快速开发脚手架;
3、springboot核心注解
@SpringBootApplication
是springboot项目的核心注解
是一个组合注解
底层包含很多子注解
@Target({ElementType.TYPE}) 当前注解使用的位置(类上,方法上,参数上)
@Retention(RetentionPolicy.RUNTIME) 保留策略 决定注解的生命周期 编译前 运行前 运行期间
@Documented 文档注解
@Inherited 表示当前注解可以被继承
@SpringBootConfiguration 创建IOC容器
@Configuration 创建IOC容器
@EnableAutoConfiguration springboot自动装配注解(最核心注解)
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
@ComponentScan 定义组件扫描的包(默认扫描当前项目启动类所在的包及其子包)
✅ @SpringBootApplication
注解详解
属性/子注解 | 说明 |
---|---|
作用 | 是 Spring Boot 项目的核心注解,用于标记项目的启动类(主类),启用自动配置、组件扫描等功能。 |
使用位置 | 通常标注在启动类上(即包含 main 方法的类) |
是否组合注解 | 是,是一个由多个注解组成的“合成注解” |
🧩 组成 @SpringBootApplication
的核心子注解
子注解 | 功能说明 |
---|---|
@SpringBootConfiguration | 创建IOC容器表示该类是一个配置类,底层继承自 @Configuration ,可以定义 Bean |
@Configuration | 创建IOC容器告诉 Spring 容器这是一个 Java 配置类,相当于 XML 配置文件的作用 |
@EnableAutoConfiguration | Spring Boot 自动装配的核心注解,会根据 classpath 中的依赖自动配置 Bean |
@AutoConfigurationPackage | 将主类所在包及其子包中的 Bean 自动注册到 Spring 容器中(内部通过 @Import 实现) |
@ComponentScan | 自动扫描并注册 Bean,默认扫描当前主类所在的包及其子包 |
@Import({AutoConfigurationImportSelector.class}) | 导入自动配置类的选择器,决定了哪些自动配置类需要被加载 |
🔍 元注解(Meta-Annotations)
元注解 | 含义 |
---|---|
@Target({ElementType.TYPE}) | 表示该注解只能用于 类级别 上(不能用在方法或参数上) |
@Retention(RetentionPolicy.RUNTIME) | 表示该注解在运行时依然有效,可以通过反射读取 |
@Documented | 表示该注解会被包含在 Javadoc 中 |
@Inherited | 表示该注解可以被子类继承 |
package com.hl.springboot1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/*
@SpringBootApplication
是springboot项目的核心注解
是一个组合注解
底层包含很多子注解
@Target({ElementType.TYPE}) 当前注解使用的位置(类上,方法上,参数上)
@Retention(RetentionPolicy.RUNTIME) 保留策略 决定注解的生命周期 编译前 运行前 运行期间
@Documented 文档注解
@Inherited 表示当前注解可以被继承
@SpringBootConfiguration 创建IOC容器
@Configuration 创建IOC容器
@EnableAutoConfiguration springboot自动装配注解(最核心注解)
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
@ComponentScan 定义组件扫描的包(默认扫描当前项目启动类所在的包及其子包)
*/
@SpringBootApplication
public class Springboot1Application {
public static void main(String[] args) {
SpringApplication.run(Springboot1Application.class, args);
}
}
4、定义banner(springboot的logo)
关于动物的ascii艺术字,自定义Spring Boot 动物 banner下载,各种有意思的banner、ascii图案,还有中文文字banner,作为Spring Boot和终端命令行banner会让项目更有意思。-bootschool.net
5、springboot配置文件
.properties配置文件
key=value
.yml配置文件
使用 : 空格 回车 tab键 进行缩
有多个配置文件,向激活特定配置文件,实现多个环境的切换
application-dev.yml
application-test.yml
application.yml
spring:profiles:active: dev
6、springboot 整合 jdbc
1)引入jar包
<!--mysql-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!--springboot整合jdbc的jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependenc
2)添加mysql连接的配置
application-dev.yml
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/yan9username: rootpassword: 123456
3)补全包结构,搭建web层和dao层(省略service)
javaBean类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
private int deptId;
private String deptName;
private String loc;
}
web层
@RestController
@RequestMapping("/dept")
public class DeptController {
//调用dao层
@Autowired
private DeptDao deptDao;
@RequestMapping("/save")
public int save(Dept dept) {
return deptDao.save(dept);
}
}
dao层
public interface DeptDao {
public int save(Dept dept);
}
@Repository
public class DeptDaoImpl implements DeptDao{
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public int save(Dept dept) {
//调用jdbcTemplate封装好的方法执行新增
String sql = "insert into dept(dept_name,loc) values(?,?)";
//update 执行增删改
int num = jdbcTemplate.update(sql,dept.getDeptName(),dept.getLoc());
return num;
}
}
4)测试
二、面试题
1)springmvc的作用
Spring MVC 是 Spring 框架中的一个核心模块,专门用于构建 基于 Java 的 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三层,从而实现代码的解耦和高效协作。
-
springmvc实现的功能
- springmvc接收请求
- springmvc接收数据
- 返回数据给前端
- 页面跳转(携带数据)
- Spring MVC 的核心作用
(1) 处理 HTTP 请求和响应
-
作用:接收客户端(浏览器、移动端等)的 HTTP 请求,解析参数,并返回数据(如 JSON、HTML)。
-
关键组件:
-
DispatcherServlet
:前端控制器,统一分发请求到对应的 Controller。 -
@Controller
/@RestController
:处理具体业务逻辑的控制器。
-
(2) 实现 MVC 分层架构
层级 | 职责 | Spring MVC 对应实现 |
---|---|---|
Model | 封装业务数据和状态(如数据库查询结果) | 实体类(Entity)、DTO、Service 层返回的对象 |
View | 渲染数据(如生成 HTML、JSON、XML) | JSP、Thymeleaf、FreeMarker 或直接返回 JSON(前后端分离) |
Controller | 接收请求,调用业务逻辑,返回模型和视图 | @Controller 或 @RestController 类中的方法 |
(3) 提供灵活的请求映射和参数绑定
-
URL 路由:通过
@RequestMapping
、@GetMapping
等注解将请求映射到方法。 -
参数解析:
-
@RequestParam
:获取 URL 查询参数。 -
@PathVariable
:获取 RESTful 风格的路径参数。 -
@RequestBody
:解析 JSON/XML 请求体。 -
@ModelAttribute
:绑定表单数据到对象。
-
(4) 支持多种视图技术
-
服务端渲染:JSP、Thymeleaf、FreeMarker。
-
前后端分离:直接返回 JSON/XML(通过
@ResponseBody
或@RestController
)。
(5) 提供拦截器和全局异常处理
-
拦截器(Interceptor):在请求处理前后插入逻辑(如权限校验、日志记录)。
-
全局异常处理:通过
@ControllerAdvice
统一捕获异常,返回友好错误信息。
(6) 集成其他 Spring 功能
-
依赖注入(DI):通过
@Autowired
管理组件依赖。 -
事务管理:结合
@Transactional
实现数据库事务控制。 -
AOP:实现日志、权限等横切关注点。
Spring MVC 的工作流程
-
用户发起请求 → 请求到达
DispatcherServlet
(前端控制器)。 -
DispatcherServlet
查询处理器映射(HandlerMapping
)→ 找到对应的 Controller 方法。 -
调用 Controller → 执行业务逻辑(可能调用 Service 和 Repository 层)。
-
返回模型和视图:
-
如果返回
String
(如"success"
),ViewResolver
会解析为具体的视图(如success.jsp
)。 -
如果返回
@ResponseBody
或@RestController
,直接序列化为 JSON/XML。
-
-
渲染响应 → 返回给客户端。
2)springmvc的核心组件
1、DispatcherServlet 前端控制器
2、HandlerMapping 处理器映射器
3、HandlerAdapter 处理器适配器
4、Handler 处理器
5、ViewResolver 视图解析器组件
3)springmvc的内部执行流程
1、浏览器发起请求: http://localhost:8080/user/getById?id=1
2、浏览器解析地址:http:// localhost 8080
3、定位到硬件服务器 ip 和 软件服务器 8080(tomcat应用)
4、通过8080----->部署的项目
5、前端控制器接收请求 解析url路径得到资源路径 /user/getById
6、前端控制器 通过调用 处理器映射器,查询 handler是否存在
7、如果路径存在,返回路径的执行链给前端控制器。如果不存在,返回404。
执行链包含了目标方法前的一系列过滤器和拦截器 目标方法路径 及后置的过滤器和拦截器。
8、前端控制器 调用处理器适配器 请求执行handler(目标方法)
9、处理器适配器封装参数到目标方法的参数中(解析httpServletRequest ,调用
request.getParameter方法)
10、执行目标handler(目标方法) 目标handler响应结果给处理器适配器(数据和视图名)
11、处理器是配置返回modelandview给前端控制器
12、前端控制器,请求视图解析器, 拼接前缀路径和后缀路径,得到完整的视图名
13、前端控制器,将model中的数据,在指定的视图页面上进行渲染
14、响应结果给前端。
4)@RequestBody注解的作用
@RequestBody
是 Spring MVC 中用于 处理 HTTP 请求体数据 的核心注解,主要作用是将请求体中的内容(如 JSON、XML)自动绑定到 Java 对象
核心作用:将 HTTP 请求体(JSON/XML)自动反序列化为 Java 对象。
5)mvc架构模式
MVC 架构 model 业务层、view 视图层、controller控制层
view 视图层:用户交互 html、css、js、vue、小程序
controller 控制层: 接收前端请求、接收前端数据、返回数据给前端 spring webmvc (web包)
model 业务层: 业务操作 service、dao、pojo
6)properties和yml配置文件的区别
.properties配置文件
key=value
.yml配置文件
使用 : 空格 回车 tab键 进行缩
有多个配置文件,向激活特定配置文件,实现多个环境的切换
application-dev.yml
application-test.yml
application.yml
spring:profiles:active: dev