SpringBoot面试题, Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?
SpringBoot面试题, Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?
QA
Step 1
Q:: Spring Boot 打成的 jar 和普通的 jar 有什么区别?
A:: Spring Boot 打成的 jar 包与普通的 jar 包的主要区别在于其包含的内容和执行方式。普通的 jar 包通常只包含类文件和资源文件,而 Spring Boot 的 jar 包则是一个可执行的 jar 包(fat jar),它不仅包含应用的类文件和资源文件,还包含所有的依赖项(依赖 jar 包),以及一个嵌入式的 Tomcat 或 Jetty 等服务器。通过这种方式,Spring Boot 应用可以直接运行,无需外部应用服务器。具体的区别还包括:
1.
启动方式不同:Spring Boot jar 包通过 java -jar
命令启动,而普通 jar 包通常需要在应用服务器中部署。
2.
目录结构不同:Spring Boot jar 包内有一个特殊的目录结构,比如 BOOT-INF
目录,而普通 jar 包则是标准的 META-INF
目录。
3.
加载方式不同:Spring Boot jar 包使用 spring-boot-loader
进行类加载,而普通 jar 包依赖于 JVM 的默认类加载机制。
Step 2
Q:: 如何创建一个 Spring Boot 项目?
A:: 创建 Spring Boot 项目可以通过多种方式进行:
1. **使用 Spring Initializr**:可以访问 [start.spring.io](https://start.spring.io)
网站,选择所需的依赖和配置,然后生成项目结构并下载。
2.
使用 IDE:大多数主流的 IDE,如 IntelliJ IDEA、Eclipse 等,均支持直接创建 Spring Boot 项目,通常集成了 Spring Initializr。
3.
手动创建:可以手动创建一个 Maven 或 Gradle 项目,添加必要的 Spring Boot 依赖和配置文件(如 application.properties
或 application.yml
),然后开始开发。
Step 3
Q:: 什么是 Spring Boot 的自动配置?
A:: Spring Boot 的自动配置是其核心特性之一,能够根据项目的依赖和配置自动配置 Spring 应用上下文中的 Bean。通过这种方式,开发者无需手动配置大量的 XML 或 Java 配置代码。Spring Boot 的自动配置是通过 @EnableAutoConfiguration
注解启用的,并且可以通过 @SpringBootApplication
注解简化。自动配置的原理依赖于条件注解(如 @ConditionalOnClass``,
@ConditionalOnMissingBean
等)来判断是否需要创建特定的 Bean。例如,当项目中存在 HikariCP
依赖时,Spring Boot 会自动配置 DataSource
,并使用 HikariCP
作为连接池。