博客
关于我
面试官分享在java面试中常问的spring boot相关的问题
阅读量:417 次
发布时间:2019-03-06

本文共 4789 字,大约阅读时间需要 15 分钟。

Spring Boot技术问答解析

随着信息技术的飞速发展,Spring Boot作为一款灵活高效的全栈框架,正在越来越多地被开发者青睐。作为一名技术面试者,掌握Spring Boot的核心知识无疑是至关重要的。本文将从多个维度解析Spring Boot的核心概念,帮助你在面试中游刃有余。


1. Spring和Spring Boot的区别

Spring Framework是全功能性的Java应用开发框架,提供了丰富的功能模块,如依赖注入、数据绑定、面向方面编程、数据访问等。然而,随着社区的扩大,Spring逐渐变得复杂,配置管理也变得繁琐。这个时候,Spring Boot就应运而生。Spring Boot采用“约定大于配置”的理念,简化了Spring的默认配置,并将一些功能抽象为“Starter”模块,实现了“开箱即用、按需引用”的理念。通过这种方式,Spring Boot大大降低了开发门槛。


2. 使用Maven设置Spring Boot应用程序

在Maven项目中集成Spring Boot应用程序,可以通过以下两种方式实现:

  • 方式一:继承Spring Boot父项目

    这是最简单的方法。在项目的pom.xml中添加如下配置:

    org.springframework.boot
    spring-boot-starter-parent
    3.1.5

    这样可以重用Spring Boot的默认配置。然而,如果需要根据公司内部要求从特定BOM版本开始依赖,可以采用以下方式:

  • 方式二:手动引用Spring Boot starters

    dependencies标签下,手动添加所需的Spring Boot starters。例如:

    org.springframework.boot
    spring-boot-starter-web
    3.1.5

    这种方式适用于需要高度定制配置的场景。


3. Spring Boot中的Starter模块

Spring Boot的Starter模块是一种依赖管理的最佳实践。当项目复杂度增加时,手动管理依赖关系会变得异常痛苦。Spring Boot的Starter模块通过提供一站式服务,解决了这一问题。每个Starter模块都遵循spring-boot-starter-*命名规则,例如:

  • spring-boot-starter:核心启动模块,支持自动配置、日志记录和YAML文件解析。
  • spring-boot-starter-aop:用于实现面向方面编程。
  • spring-boot-starter-data-jpa:集成Spring Data JPA和Hibernate。

目前官方提供了超过50个Starter模块,常用模块包括:

  • Web应用开发:spring-boot-starter-web
  • 数据访问:spring-boot-starter-data-jpa
  • 安全管理:spring-boot-starter-security
  • 测试助手:spring-boot-starter-test

更多Starter模块可以从spring.io官方网站查询。


4. 禁用特定自动配置

在Spring Boot应用中,默认会自动配置大量的模块。如果需要禁用某些自动配置,可以通过以下方式实现:

  • 方式一:使用@EnableAutoConfiguration注解

    在主类上使用@EnableAutoConfiguration注解,并设置exclude属性,指定需要禁用的自动配置类。例如:

    @SpringBootApplication
    @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
    public class MainApplication {
    public static void main(String[] args) {
    SpringApplication.run(MainApplication.class, args);
    }
    }
  • 方式二:通过环境属性禁用自动配置

    application.properties中设置spring.autoconfigure.exclude属性。例如:

    spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.EnableAutoConfiguration

5. 注册自定义自动配置

如果需要注册自定义的自动配置类,可以按照以下步骤操作:

  • META-INF/spring.factories文件中,将自定义配置类添加到spring.autoconfigure.includeFilters属性中。例如:

    spring.autoconfigure.includeFilters= \
    org.springframework.boot.autoconfigure.filter.TypeExcludeFilter,
    com.example.MyAutoConfigurationFilter
  • 将该文件放置在项目的resources/META-INF目录中。


  • 6. 根据条件加载Bean

    在Spring Boot中,根据条件加载Bean可以通过@Conditional注解实现。常用的注解包括:

    • @ConditionalOnMissingBean:确保某个类型的Bean不存在时,才进行初始化。
    • @ConditionalOnProperty:根据环境属性条件加载Bean。

    例如:

    import org.springframework.beans.factory.annotation.ConditionalOnMissingBean;
    public class MyBean {
    @ConditionalOnMissingBean
    public MyService myService() {
    return new MyServiceImpl();
    }
    }

    7. 部署Spring Boot Web应用程序

    随着技术进步,部署Spring Boot应用程序的方式也在发生改变。以下是两种常见的部署方式:

    • WAR文件部署

      将Web应用打包为WAR文件后,部署到外部服务器中。这种方式适合多个应用共享同一台服务器资源。

    • JAR文件部署

      Spring Boot提供了spring-boot-maven-plugin插件,允许将Web应用打包为可执行的JAR文件。这种方式无需配置外部服务器,直接运行JAR文件即可启动应用。


    8. 在Spring Boot启动时执行逻辑

    如果需要在Spring Boot启动时执行某些初始化逻辑,可以实现ApplicationRunnerCommandLineRunner接口。两个接口的实现方式相同,仅提供一个run方法。例如:

    import org.springframework.boot.ApplicationRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication
    public class MainApplication implements ApplicationRunner {
    @Override
    public void run(SpringApplication app, String[] args) {
    System.out.println("Application is running...");
    }
    public static void main(String[] args) {
    SpringApplication.run(MainApplication.class, args);
    }
    }

    9. Spring Boot支持的外部配置方式

    Spring Boot允许通过多种方式加载外部配置,包括:

    • 命令行参数:通过--符号开头的参数,例如--server.port=8080
    • 应用程序属性文件:从application.propertiesapplication.yml文件中加载属性。
    • 特定配置文件:通过application-{profile}.propertiesapplication.yml文件加载环境相关属性。
    • 系统属性和环境变量:通过System.getProperty()Environment.getenv()方法获取。

    这些配置可以通过@Value注解、@ConfigurationProperties注解或Environment抽象类进行注入。


    10. 编写集成测试

    在Spring Boot项目中,编写集成测试可以通过@SpringBootTest注解实现。该注解会创建一个ApplicationContext,并从测试类所在包开始搜索主配置类。例如:

    import org.junit.jupiter.api.Test;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.beans.factory.annotation.Autowired;
    @SpringBootTest
    public class MyTest {
    @Autowired
    private ApplicationContext context;
    @Test
    void testHello() {
    System.out.println(context.getBeans().size());
    }
    }

    如果使用JUnit 4,需要在测试类上使用@RunWith(SpringRunner.class)注解。


    11. Spring Boot Actuator的功能

    Spring Boot Actuator是一个强大且灵活的应用监控工具,提供了丰富的内置端点,支持健康检查、审计、统计和HTTP追踪等功能。通过集成Actuator,可以轻松将应用与外部监控系统(如Prometheus、Graphite等)结合,实现应用的全面监控。

    Actuator的核心功能包括:

    • 健康检查:通过/health端点获取应用状态。
    • 审计日志:记录应用的审计事件。
    • 缓存信息:显示可用缓存状态。
    • 自动装配信息:提供自动装配类的状态和应用信息。

    值得注意的是,Actuator的相关端点对安全性要求较高,生产环境中必须进行合理的权限管理。


    结论

    今天,我们全面解析了Spring Boot在技术面试中的核心问题。这些知识点不仅有助于你在面试中脱颖而出,也将在日常开发中为你节省大量时间。记得关注“码农小胖哥”公众号,获取更多Java技术干货!

    转载地址:http://atjuz.baihongyu.com/

    你可能感兴趣的文章
    node安装及配置之windows版
    查看>>
    Node实现小爬虫
    查看>>
    Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
    查看>>
    Node提示:npm does not support Node.js v12.16.3
    查看>>
    Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
    查看>>
    Node服务在断开SSH后停止运行解决方案(创建守护进程)
    查看>>
    node模块化
    查看>>
    node环境下使用import引入外部文件出错
    查看>>
    Node读取并输出txt文件内容
    查看>>
    node防xss攻击插件
    查看>>
    noi 7827 质数的和与积
    查看>>
    NOIp2005 过河
    查看>>
    NOIP2011T1 数字反转
    查看>>
    NOIP2014 提高组 Day2——寻找道路
    查看>>
    NOIp模拟赛二十九
    查看>>
    None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
    查看>>
    NOPI读取Excel
    查看>>
    NoSQL&MongoDB
    查看>>
    NoSQL介绍
    查看>>
    Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>