面試題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應用的上下文。
自動配置的工作原理:
- 加載spring.factories文件
@EnableAutoConfiguration注解通過Spring提供的@Import注解導入了AutoConfigurationImportSelector類,該類中的方法會讀取spring.factories文件中的配置,加載所有的自動配置類。 - 通過條件注解判斷該配置類是否應該被加載:每個自動配置類通常都帶有一組條件注解,用于判斷該配置類是否應該被加載。條件注解有@ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty。
- 創建和注冊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