springboot常见面试题探秘

发布时间:2023-05-20

Spring Boot常见面试题解析

Spring Boot是一个基于Spring框架的开发工具,主要用于快速创建基于Spring的应用程序。在Spring Boot中,只需编写少量配置,应用程序就能跑起来。它具有轻量级、易扩展、减少配置、简化部署等特点,因此受到越来越多开发者的欢迎。 下面我们将从多个方面逐一探讨Spring Boot常见面试题。

一、Spring Boot的优缺点

  1. 优点 Spring Boot可以让开发者更专注于业务逻辑的实现,而不必去关注其他的一些繁琐的配置和实现问题。Spring Boot内置了大量的常见库,如webMVC、数据库访问等,提高了开发效率。
  2. 缺点 Spring Boot的学习曲线是比较陡峭的,在使用过程中也有一定的局限性,如默认配置不一定满足实际需求。

二、Spring Boot自动配置原理

Spring Boot的自动配置是通过Spring框架提供的Condition接口和@Conditional注解实现的。通过类路径、Bean是否已存在、属性是否存在以及运行时容器中的其他Bean是否存在等一系列条件来判断是否需要实例化一个Bean。 下面是一个自定义自动配置类的示例:

@Configuration
public class MyAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

上述代码表示:当容器中不存在名为myService的Bean时,会创建一个名为myService的Bean,并注册到Spring容器中。

三、Spring Boot中的外部配置

除了在代码中配置,Spring Boot还可以通过外部文件进行配置,如application.propertiesapplication.yml等。使用外部配置最主要的优点是在不修改源码的情况下,可以动态修改配置。 下面是一个自定义配置文件的示例:

  1. src/main/resources目录下创建config文件夹,创建一个my.properties文件
name=李四
age=25
  1. 在Java类中使用注解@PropertySource指向该自定义属性文件
@Component
@PropertySource("classpath:config/my.properties")
public class MyComponent {
    @Value("${name}")
    private String name;
    @Value("${age}")
    private int age;
    // getter和setter
}

四、Spring Boot如何处理异常

Spring Boot内置了一套异常处理机制,通过@ControllerAdvice@ExceptionHandler注解可以实现统一的异常处理。@ControllerAdvice是一个增强的Controller,可以实现三个方面的功能:全局异常处理、全局数据绑定、全局数据预处理。 下面是一个全局异常处理的示例:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Map<String, Object> handleException(Exception e) {
        Map<String, Object> map = new HashMap<>();
        map.put("status", "error");
        map.put("message", e.getMessage());
        return map;
    }
}

五、Spring Boot如何处理跨域问题

Spring Boot可以通过注解@CrossOrigin处理跨域问题。@CrossOrigin可以设置允许跨域的域名、方法、请求头等,在接口方法上使用即可。 下面是一个处理跨域问题的示例:

@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://localhost:8080", maxAge = 3600) // 设置允许跨域的域名和生存时间
public class ApiController {
    @GetMapping("/user/{id}")
    public User getUser(@PathVariable Long id) {
        // ...
    }
}

六、Spring Boot中的定时任务

Spring Boot中可以通过注解@EnableScheduling实现定时任务的自动化管理。通过@Scheduled注解可以指定任务的执行时间、周期等信息。 下面是一个定时任务的示例:

@Service
@EnableScheduling
public class MyService {
    @Scheduled(fixedDelay = 1000)
    public void doSomething() {
        // ...
    }
}

总结

本文从Spring Boot的优缺点、自动配置原理、外部配置、异常处理、跨域问题、定时任务等多个方面对Spring Boot常见面试题做了详细的阐述。Spring Boot作为一个开发基础工具,应用广泛,掌握Spring Boot的开发能力对于提高开发效率、增强竞争力等方面都具有重要意义。