springboot面试题常问
时间: 2023-08-31 19:10:39 浏览: 128
以下是一些常见的 Spring Boot 面试题:
1. 什么是 Spring Boot?
Spring Boot 是一个基于 Spring Framework 的快速开发 Web 应用程序的框架。它是为了简化 Spring 应用程序的开发和部署而创建的,使用 Spring Boot 可以快速搭建 Web 应用程序。
2. Spring Boot 的主要优点是什么?
Spring Boot 的主要优点包括:
- 快速开发:Spring Boot 提供了许多自动配置选项,可以快速创建 Spring 应用程序。
- 微服务支持:Spring Boot 可以轻松地创建和部署微服务应用程序。
- 自动配置:Spring Boot 可以根据应用程序的依赖关系自动配置应用程序。
- 简化部署:Spring Boot 可以将应用程序打包成一个可执行的 JAR 文件,使得部署变得更加简单。
- 易于测试:Spring Boot 提供了许多测试工具,可以轻松地测试应用程序。
3. Spring Boot 如何实现自动配置?
Spring Boot 可以根据应用程序的依赖关系自动配置应用程序。它会扫描应用程序的依赖关系,并根据这些依赖关系自动配置应用程序。例如,如果应用程序依赖于 Spring MVC,则 Spring Boot 会自动配置 Spring MVC。
4. Spring Boot 的启动流程是什么?
Spring Boot 的启动流程包括以下步骤:
- 加载 Spring Boot 的核心配置文件。
- 扫描应用程序的依赖关系。
- 根据应用程序的依赖关系自动配置应用程序。
- 启动应用程序。
5. Spring Boot 如何配置数据库连接?
在 Spring Boot 中配置数据库连接可以使用 application.properties 或者 application.yml 文件。在这些文件中,可以配置数据库的连接信息,如下所示:
```
# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
```
```
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
```
6. Spring Boot 如何处理异常?
Spring Boot 可以使用 @ControllerAdvice 注解来处理应用程序中的异常。这个注解用来定义一个全局的异常处理器,可以处理所有的异常。例如:
```
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public String handleException(Exception e) {
return "error";
}
}
```
在上面的代码中,@ControllerAdvice 注解用来定义全局异常处理器,@ExceptionHandler 注解用来指定处理哪种异常。在这个例子中,处理所有的异常,并返回一个名为 error 的视图。
7. Spring Boot 如何实现 AOP?
Spring Boot 可以使用 @Aspect 注解来实现 AOP。这个注解用来定义一个切面,可以在应用程序中拦截方法的调用,并执行一些额外的操作。例如:
```
@Aspect
@Component
public class LogAspect {
@Pointcut("execution(public * com.example.demo.controller.*.*(..))")
public void log() {}
@Before("log()")
public void before(JoinPoint joinPoint) {
System.out.println("before");
}
@After("log()")
public void after(JoinPoint joinPoint) {
System.out.println("after");
}
}
```
在上面的代码中,@Aspect 注解用来定义一个切面,@Pointcut 注解用来定义一个切点,指定哪些方法需要被拦截。在这个例子中,拦截 com.example.demo.controller 包下的所有方法。@Before 和 @After 注解用来定义前置通知和后置通知。在这个例子中,输出 before 和 after。
阅读全文