面试题008-Java-SpringBoot

面试题008-Java-SpringBoot

目录

  • 面试题008-Java-SpringBoot
    • 题目自测
    • 题目答案
      • 1. Spring 和 Spring Boot有什么区别?
      • 2. Spring Boot 的主要优点是什么?
      • 3. 什么是Spring Boot Starter?
      • 4. 介绍一下@SpringBootApplication注解?
      • 5. Spring Boot是如何实现自动配置的?
      • 6. Spring Boot中读取配置文件的方式有哪些?
      • 7. Spring Boot中加载配置文件的优先级是怎样的?
      • 8. 如何在Spring Boot中实现日志记录?
    • 参考资料

题目自测

  • 1. Spring 和 Spring Boot有什么区别?
  • 2. Spring Boot 的主要优点是什么?
  • 3. 什么是Spring Boot Starter?
  • 4. 介绍一下@SpringBootApplication注解?
  • 5. Spring Boot是如何实现自动配置的?
  • 6. Spring Boot中读取配置文件的方式有哪些?
  • 7. Spring Boot中加载配置文件的优先级是怎样的?
  • 8. 如何在Spring Boot中实现日志记录?

题目答案

1. Spring 和 Spring Boot有什么区别?

答:Spring是一个Java应用开发框架,它提供了丰富的功能,如依赖注入、面向切面编程等功能,简化了企业级应用开发。但它需要大量的XML配置文件或基于注解的配置,所以在配置上它比较繁琐。
Spring Boot是基于Sring框架的子项目,主要是为了简化Spring应用的创建和配置。通过约定优于配置的原则,减少了开发和配置的复杂性。

2. Spring Boot 的主要优点是什么?

答:Spring Boot的主要优点有:

  • 简化配置:遵循约定优于配置的原则,默认提供了很多合理的配置,开发者只需在必要时进行定制化配置。
  • 内嵌服务器:Spring Boot支持内嵌的Tomcat,Jetty等服务器,使得打包可以生成一个可以直接运行的JAR文件。
  • 快速开发:Spring Boot提供了快速开发的体验,包括热部署、自动刷新等功能,提供了Spring Initializer工具。
  • 生产就绪功能:提供了强大的生产环境的监控和管理功能。
  • 简化依赖管理:Spring Boot使用了起步依赖来简化构建配置,避免了手动管理依赖及其版本号的麻烦。

3. 什么是Spring Boot Starter?

答:Spring Boot Starter 是 Spring Boot 提供的一系列依赖包,用于简化应用程序的依赖管理和配置。它预先打包了一组相关的库和配置,帮助开发者快速搭建不同功能的Spring Boot应用,而无需手动添加和配置各个依赖项。

<dependencies><!-- 用于Web开发的起始依赖包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

4. 介绍一下@SpringBootApplication注解?

答:@SpringBootApplication注解主要是用于简化Spring Boot应用的配置和启动。它是一个组合注解,包含了多个常用的Spring注解。该注解主要包含了以下三个注解:

  • @SpringBootConfiguration:标识这是一个配置类。
  • @EnableAutoConfiguration:启用 Spring Boot 的自动配置机制,根据类路径中的依赖和配置文件中的配置,自动配置 Spring 应用上下文。
  • @ComponentScan:启用组件扫描,自动发现和注册 Spring 组件(如@Compoent、@Service等)。
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    @Import({ AutoConfigurationImportSelector.class })
    public @interface SpringBootApplication {// ....
    }
    

5. Spring Boot是如何实现自动配置的?

答:Spring Boot中的自动配置是通过@SprinBootApplication注解中的@EnableAutoConfiguration注解来启用自动配置机制的,指示Spring Boot根据应用的依赖和配置自动配置Spring应用的上下文。
自动配置的工作原理:

  1. 加载spring.factories文件
    @EnableAutoConfiguration注解通过Spring提供的@Import注解导入了AutoConfigurationImportSelector类,该类中的方法会读取spring.factories文件中的配置,加载所有的自动配置类。
  2. 通过条件注解判断该配置类是否应该被加载:每个自动配置类通常都带有一组条件注解,用于判断该配置类是否应该被加载。条件注解有@ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty。
  3. 创建和注册Bean,实现自动配置:满足条件的自动配置类会被加载,并按照其定义创建和注册相应的 Bean。

6. Spring Boot中读取配置文件的方式有哪些?

答:常见的读取配置的方式有:

  • 使用@Value注解:直接在字段或方法参数上使用。

    @Component
    public class AppConfig {@Value("${app.name}")private String appName;@Value("${app.version}")private String appVersion;// getters and setters
    }
    
  • 使用@ConfigurationProperties注解:注解用于将配置文件中的属性映射到一个 Java 类中。

    @Component
    @ConfigurationProperties(prefix = "app")
    public class AppProperties {private String name;private String version;private Security security;// getters and setterspublic static class Security {private String username;private String password;// getters and setters}
    }
    
  • 使用@propertySource注解:注解用于加载非默认位置的配置文件。

    @Configuration
    @PropertySource("classpath:config.properties")
    public class PropertySourceConfig {@Value("${app.name}")private String appName;@Value("${app.version}")private String appVersion;// getters and setters
    }
    
  • 使用Environment接口:用于以编程方式访问属性值。

    @Component
    public class EnvironmentConfig {@Autowiredprivate Environment env;public String getAppName() {return env.getProperty("app.name");}public String getAppVersion() {return env.getProperty("app.version");}
    }
    

7. Spring Boot中加载配置文件的优先级是怎样的?

答:Spring Boot中配置文件加载的优先级从高到低依次是:命令行参数、系统属性、外部配置文件、内部配置文件、@PropertySource 注解声明的属性源和默认属性。

  • 命令行参数:在启动应用时通过命令行传递的参数。例如,–server.port=8081。
  • 系统属性:通过System.gerProperties()访问的属性。
  • 外部配置文件:jar包外部的application.properties或application.yml文件。
  • 内部配置文件:jar包内部的application.properties或application.yml文件。
  • @PropertySource 注解声明的属性源。
  • 默认属性。

8. 如何在Spring Boot中实现日志记录?

答:在Spring Boot中默认使用Logback作为日志框架进行日志记录,默认情况下,Spring Boot会自动对Logback进行配置。如果你需要更复杂的日志配置,可以通过自定义Logback配置文件来实现。

@Component
public class MyComponent {private static final Logger logger = LoggerFactory.getLogger(MyComponent.class);public void doSomething() {logger.info("This is an info message");logger.debug("This is a debug message");logger.error("This is an error message");}
}

参考资料

  • JavaGuide
  • 牛客网-Java面试宝典
  • Spring源码解析
  • Spring官方文档
  • ChatGPT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【密码学】消息认证

你发送给朋友一条消息&#xff08;内容&#xff1a;明天下午来我家吃饭&#xff09;&#xff0c;这一过程中你不想让除你朋友以外的人看到消息的内容&#xff0c;这就叫做消息的机密性&#xff0c;用来保护消息机密性的方式被叫做加密机制。 现在站在朋友的视角&#xff0c;某一…

使用PyQt5实现添加工具栏、增加SwitchButton控件

前言&#xff1a;通过在网上找到的“电池电压监控界面”&#xff0c;学习PyQt5中添加工具栏、增加SwitchButton控件&#xff0c;在滑块控件右侧增加文本显示、设置界面背景颜色、修改文本控件字体颜色等。 1. 上位机界面效果展示 网络上原图如下&#xff1a; 自己使用PyQt5做…

springboot异常(一):springboot自定义全局异常处理

&#x1f337;1. 自定义一个异常类 自定义一个异常&#xff0c;有两个变量异常代码、异常消息&#xff0c;定义了两个构造方法&#xff0c;一个无参构造方法&#xff0c;一个所有参数构造方法。 在构造方法中要掉用父类的构造方法&#xff0c;主要目的是在日志或控制台打印异…

【Linux】多线程_3

文章目录 九、多线程3. C11中的多线程4. 线程的简单封装 未完待续 九、多线程 3. C11中的多线程 Linux中是根据多线程库来实现多线程的&#xff0c;C11也有自己的多线程&#xff0c;那它的多线程又是怎样的&#xff1f;我们来使用一些C11的多线程。 Makefile&#xff1a; te…

Linux - 探索命令行

探索命令行 Linux命令行中的命令使用格式都是相同的: 命令名称 参数1 参数2 参数3 ...参数之间用任意数量的空白字符分开. 关于命令行, 可以先阅读一些基本常识. 然后我们介绍最常用的一些命令: ls用于列出当前目录(即"文件夹")下的所有文件(或目录). 目录会用蓝色…

面试经典题型:调用HashMap的put方法的具体执行流程

在调用put方法时时&#xff0c;有几个关键点需要考虑&#xff1a; 哈希冲突的发生与解决&#xff1a; 哈希冲突指不同的键通过哈希函数计算得到相同的哈希值&#xff0c;导致它们应该存放在哈希表的同一个位置。解决冲突的常用方法包括开放寻址法和链表法&#xff08;或其升级形…

CSIP-FTE考试专业题

靶场下载链接&#xff1a; https://pan.baidu.com/s/1ce1Kk0hSYlxrUoRTnNsiKA?pwdha1x pte-2003密码&#xff1a;admin123 centos:root admin123 解压密码&#xff1a; PTE考试专用 下载好后直接用vmware打开&#xff0c;有两个靶机&#xff0c;一个是基础题&#x…

【CTF-Crypto】数论基础-02

【CTF-Crypto】数论基础-02 文章目录 【CTF-Crypto】数论基础-021-16 二次剩余1-20 模p下-1的平方根*1-21 Legendre符号*1-22 Jacobi符号*2-1 群*2-2 群的性质2-3 阿贝尔群*2-4 子群2-11 群同态2-18 原根2-21 什么是环2-23 什么是域2-25 子环2-26 理想2-32 多项式环 1-16 二次剩…

打造智慧校园德育管理,提升学生操行基础分

智慧校园的德育管理系统内嵌的操行基础分功能&#xff0c;是对学生日常行为规范和道德素养进行量化评估的一个创新实践。该功能通过将抽象的道德品质转化为具体可量化的指标&#xff0c;如遵守纪律、尊师重道、团结协作、爱护环境及参与集体活动的积极性等&#xff0c;为每个学…

医疗器械FDA |FDA网络安全测试具体内容

医疗器械FDA网络安全测试的具体内容涵盖了多个方面&#xff0c;以确保医疗器械在网络环境中的安全性和合规性。以下是根据权威来源归纳的FDA网络安全测试的具体内容&#xff1a; 一、技术文件审查 网络安全计划&#xff1a;制造商需要提交网络安全计划&#xff0c;详细描述产…

Matlab【光伏预测】基于雪融优化算法SAO优化高斯过程回归GPR实现光伏多输入单输出预测附代码

% 光伏预测 - 基于SAO优化的GPR % 数据准备 % 假设有多个输入特征 X1, X2, …, Xn 和一个目标变量 Y % 假设数据已经存储在 X 和 Y 中&#xff0c;每个变量为矩阵&#xff0c;每行表示一个样本&#xff0c;每列表示一个特征 % 参数设置 numFeatures size(X, 2); % 输入特征的…

Spring Boot集成easyposter快速入门Demo

1.什么是easyposter&#xff1f; easyposter是一个简单的,便于扩展的绘制海报工具包 使用场景 在日常工作过程中&#xff0c;通常一些C端平台会伴随着海报生成与分享业务。因为随着移动互联网的迅猛发展&#xff0c;社交分享已成为我们日常生活的重要组成部分。海报分享作为…

visual studio 2019版下载以及与UE4虚幻引擎配置(过程记录)(官网无法下载visual studio 2019安装包)

一、概述 由于需要使用到UE4虚幻引擎&#xff0c;我使用的版本是4.27版本的&#xff0c;其官方默认的visual studio版本是2019版本的&#xff0c;相应的版本对应关系可以通过下面的官方网站对应关系查询。https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/Develo…

MMSegmentation笔记

如何训练自制数据集&#xff1f; 首先需要在 mmsegmentation/mmseg/datasets 目录下创建一个自制数据集的配置文件&#xff0c;以我的苹果叶片病害分割数据集为例&#xff0c;创建了mmsegmentation/mmseg/datasets/appleleafseg.py 可以看到&#xff0c;这个配置文件主要定义…

python:使用matplotlib库绘制图像(四)

作者是跟着http://t.csdnimg.cn/4fVW0学习的&#xff0c;matplotlib系列文章是http://t.csdnimg.cn/4fVW0的自己学习过程中整理的详细说明版本&#xff0c;对小白更友好哦&#xff01; 四、条形图 1. 一个数据样本的条形图 条形图&#xff1a;常用于比较不同类别的数量或值&…

3dmax-vray5大常用材质设置方法

3dmax云渲染平台——渲染100 以高性价比著称&#xff0c;是预算有限的小伙伴首选。 15分钟0.2,60分钟内0.8;注册填邀请码【7788】可领30元礼包和免费渲染券 提供了多种机器配置选择(可以自行匹配环境)最高256G大内存机器&#xff0c;满足不同用户需求。 木纹材质 肌理调整&…

函数语意学(The Sematics of Function)

1、非静态成员函数转化为非成员函数 c 设计准则之一就是&#xff1a;非静态成员函数至少和非成员函数有相同的效率。 也就是说下面两个函数具有相同的效率&#xff1a; float magnitude(const Point3d * this){...}; float Point3d::magnitude(){...};以 float Point3d::mag…

练习9.5 彩票分析

练习 9.14&#xff1a;彩票 创建⼀个列表或元素&#xff0c;其中包含 10 个数和 5 个字 ⺟。从这个列表或元组中随机选择 4 个数或字⺟&#xff0c;并打印⼀条消息&#xff0c; 指出只要彩票上是这 4 个数或字⺟&#xff0c;就中⼤奖了。 练习 9.15&#xff1a;彩票分析 可以使…

面试题 05. 替换空格

05. 替换空格 题目描述示例 题解 题目描述 请实现一个函数&#xff0c;把字符串 s 中的每个空格替换成"%20"。 示例 示例1 输入&#xff1a;s “We are happy.” 输出&#xff1a;“We%20are%20happy.” 题解 class Solution { public:string replaceSpace(stri…

jQuery 元素选择器集合

jQuery 提供了一套非常强大的元素选择器&#xff0c;它们可以以各种方式定位和操作网页文档中的元素。 以下是 jQuery 中的一些常用选择器&#xff1a; 1、基本选择器 #id&#xff1a;选择 ID 为 id 的元素。.&#xff08;类选择器&#xff09;&#xff1a;选择具有特定类的…