java面试题(SpringBoot)

SpringBoot简化了Spring的使用,提供了自动配置和starter,使得开发更高效。它内置web容器,开箱即用,支持安全配置,能实现应用程序的安全性。同时,SpringBoot通过@SpringBootApplication注解实现组件扫描和自动配置。此外,还介绍了SpringBoot的启动原理和如何处理异常、实现定时任务等。

目录

1.什么是SpringBoot?有什么优点?

2.SpringBoot核心注解是什么?由哪几个注解组成?

3.SpringBoot自动装配机制

4.SpringBoot如何实现应用程序的安全性

5.SpringBoot中监听器是什么

6.什么是 CSRF 攻击?

7.SpringBoot比Spring做了哪些改进?

8.运行SpringBoot有哪几种方式

9.SpringBoot配置加载顺序

10.为什么SpringBoot的jar可以直接运行

11.SpringBoot的启动原理

12.SpringBoot Starter是什么?常用的Starter有哪些?

13.如何在SpringBoot启动的时候运行一些特定的代码

14.SpringBoot如何实现异常处理

15.SpringBoot的核心配置文件有哪些?区别是什么?

16.Spring Boot、Spring MVC 和 Spring 有什么区别?

17.SpringBoot的run方法做了什么事情?

18.SpringBoot如何解决跨域

19.SpringBoot如何兼容老的Spring项目

20.SpringBoot如何实现定时任务


1.什么是SpringBoot?有什么优点?

        springboot是spring的子项目,是spring组件的一站式解决方案,简化了使用的难度,简省了配置

优点:

  1. 容易上手,提升开发效率
  2. 内置web容器
  3. 管理第三方工具包,避免了大量maven版本冲突
  4. 简化开发,没有代码生成,也没有xml配置
  5. 开箱即用,减少配置

2.SpringBoot核心注解是什么?由哪几个注解组成?

核心注解是:@SpringBootApplication

组成:

        @SpringBootConfiguration:组合了@Configuration注解,表示当前类是一个配置类

        @EnableAutoConfiguration:开启自动配置功能

        @ComponentScan:定义 Spring 的扫描路径

当spring容器在启动时加上@SpringBootApplication注解,SpringBoot就会进行扫描,就会导入自动配置类并解析

3.SpringBoot自动装配机制

自动装配就是自动去把第三方组件的Bean装载到IOC容器里面,不需要开发人员再去写Bean相关的配置;

在SpringBoot中只需要加上@SpringBootApplication注解就可以实现自动装配;

4.SpringBoot如何实现应用程序的安全性

使用依赖项,必须添加安全配置

5.SpringBoot中监听器是什么

actuator,监视器可帮助访问生产环境中正在运行的应用程序的当前状态

6.什么是 CSRF 攻击?

CSRF指的是跨站请求伪造

7.SpringBoot比Spring做了哪些改进?

  1. Springboot可以独立建立Spring应用程序
  2. 内嵌tomcat
  3. 无需繁重的xml配置
  4. 可以自动配置Spring
  5. 整合了常用的依赖

8.运行SpringBoot有哪几种方式

  1. 打包用命令或者放到容器中运行
  2. 用maven插件运行
  3. 直接执行main方法

9.SpringBoot配置加载顺序

通过事件监听的方式读取配置文件

1.properties文件

2.ymal文件

3.系统环境变量

4.命令行参数

10.为什么SpringBoot的jar可以直接运行

11.SpringBoot的启动原理

12.SpringBoot Starter是什么?常用的Starter有哪些?

Starter可以理解为启动器,包含了一系列可以集成到应用里面的依赖包,可以一站式集成Spring其他的技术,而不需要到处寻找代码和依赖包。

常见的Starter:

        spring-boot-starter-web:嵌入servlet与jsp支持

        spring-boot-starter-data-jpa:数据库支持

        spring-boot-starter-data-redis:redis支持

        spring-boot-starter-test:支持常规测试

        spring-boot-starter-jdbc        ......

13.如何在SpringBoot启动的时候运行一些特定的代码

        可以实现接口ApplicationRunner,重写run方法,再把实现接口的类加入容器中

14.SpringBoot如何实现异常处理

        通过实现一个ControlerAdvice类,来处理控制器类抛出的所有异常

15.SpringBoot的核心配置文件有哪些?区别是什么?

        核心配置文件:application和bootstrap配置文件

区别:

        1.bootstrap先于application加载,bootstrap里面的属性不能被覆盖

        2.application主要用于spring boot 项目的自动化配置

        3.bootstrap:使用配置中心时,这时需要在bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;一些固定的不能被覆盖的配置;一些加密/解密的场景。

16.Spring Boot、Spring MVC 和 Spring 有什么区别?

        1.范围:spring mvc < spring < springboot;

        2.Spring MVC和Spring Boot都属于Spring,Spring MVC 是基于Spring的一个 MVC 框架,而Spring Boot 是基于Spring的一套快速开发整合包

        3.Spring包含了SpringMVC,而SpringBoot又包含了Spring或者说是在Spring的基础上做得一个扩展

17.SpringBoot的run方法做了什么事情?

         做了一个类似于ioc的初始化操作

        1.启动计时器

        2.加载监听器

        3.准备环境

        4.创建上下文

        5.刷新上下文

        6.启动web服务器

        7.调用Runners

        8.完成启动

18.SpringBoot如何解决跨域

        利用CORS来解决跨域,通过实现WebMvcConfigurer接口,然后重写addCorsMappings方法来解决跨域。

19.SpringBoot如何兼容老的Spring项目

        可以兼容;可以使用@ImportResource注解来导入老Spring项目的配置文件

20.SpringBoot如何实现定时任务

        使用@Scheduled注解来实现

### Spring Boot 自动装配原理 Spring Boot 的自动装配功能是其核心特性之一,旨在简化传统的 Spring 应用程序配置流程。以下是对其工作原理的详细解析: #### 1. **@SpringBootApplication 注解的作用** @SpringBootApplication 是一个复合注解,由以下几个主要部分组成: - @SpringBootConfiguration:表明这是一个 Spring Boot 配置类。 - @EnableAutoConfiguration:启用自动配置机制,这是自动装配的核心所在[^2]。 - @ComponentScan:开启组件扫描,默认会扫描该注解所在的包及其子包内的所有组件。 通过在启动类上标注此注解,开发者无需额外配置即可完成大部分基础设置。 #### 2. **自动装配的核心 —— @EnableAutoConfiguration** @EnableAutoConfiguration 实际上是一个触发器,它通过将 AutoConfigurationImportSelector 类导入到容器中来实现自动化配置的功能[^4]。这个选择器负责收集所有的候选配置类,并决定哪些应该被加载进上下文中。 #### 3. **META-INF/spring.factories 文件的角色** Spring Boot 利用了 Java SPI(Service Provider Interface)机制,在 classpath 下寻找名为 META-INF/spring.factories 的资源文件。该文件定义了一系列扩展点与其对应的实现类映射关系。其中就包含了众多以 EnableAutoConfiguration 开头的关键条目[^3]。 例如: ```properties org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,... ``` 每当项目运行时,Spring Boot 就会读取这些信息并实例化相应的 Configuration Classes。 #### 4. **条件化装配 (Conditional Configuration)** 为了确保只有必要的依赖才会生效,Spring Boot 广泛采用了基于 Condition 的动态决策方式。这意味着即使存在某个特定的技术栈关联的 auto-configurator ,但如果环境不满足预设的前提条件,则不会激活相关联的服务初始化逻辑[^3]。 典型的应用场景包括但不限于检测是否存在某类 jar 包、属性值是否符合预期等等。常用的条件注解有如下几种形式: - @ConditionalOnClass 和 @ConditionalOnMissingClass :分别用于验证指定类型是否可获得或缺失; - @ConditionalOnBean / @ConditionalOnMissingBean : 检验 IOC 容器内部是否有某种 bean 对象注册成功与否; - @ConditionalOnProperty : 根据 application.properties 或 yml 文件里的键名匹配结果判定开关状态; #### 5. **总结** 综上所述,Spring Boot 的自动装配主要是依靠 @EnableAutoConfiguration 注解读入一系列预先定义好的 configuration classes 。再配合灵活多样的 conditional rules 设计思路,从而达到按需定制的效果。这种设计理念不仅减少了人为干预的成本开销,同时也提高了整体系统的稳定性和一致性水平。 --- ### 示例代码片段 以下展示了如何自定义一个简单的自动配置模块: ```java @Configuration @ConditionalOnClass(SomeThirdPartyLibrary.class) public class MyCustomAutoConfig { @Bean public SomeService someService(){ return new DefaultSomeServiceImpl(); } } ``` 在此基础上,还需记得更新 spring.factories 文件内容以便框架识别新增加的支持选项。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值