介绍一下Spring Boot,有哪些优点?
Spring Boot提供了一套默认配置,通过约定大于配置帮我们快速搭建Spring项目骨架。
以前的Spring开发需要配置大量的xml文件,大量第三方jar包依赖还要手动引入。Spring Boot只需要引入一个Starter和@SpringBootApplication注解就可以搞定。
优点有:
- Spring Boot内嵌了Tomcat、Jetty、Undertow等容器,直接运行jar包就能启动
- Spring Boot内置了Starter和自动配置,省去了大量手动配置的工作。比如如果项目中添加了 spring-boot-starter-web,Spring Boot 会自动引入并配置 Tomcat 和 Spring MVC。
- Spring Boot内置了Actuator和DevTools,便于调试和监控。
Spring Boot常用注解有哪些?
- @SpringBootApplication:Spring Boot 应用的入口,用在启动类上。
- 还有一些 Spring 框架本身的注解,比如 @Component、@RestController、@Service、@ConfigurationProperties、@Transactional 等。
Spring Boot自动配置原理了解吗?
Spring Boot 会根据项目类路径中存在的 Jar 包、自定义的 Bean 以及各种配置属性,自动推断并创建、配置应用程序所需的各种组件,而无需手动编写大量的配置代码。
在 Spring Boot 中,开启自动配置的注解是@EnableAutoConfiguration,
它会扫描所有自动配置类。
Spring Boot 为了进一步简化,直接通过 @SpringBootApplication
注解一步搞定,该注解包含了 @EnableAutoConfiguration
注解。
main 类启动的时候,Spring Boot 会加载所有自动装配类到内存,但不会立即生效。需要条件注册@Condition评估所有条件都满足后,该配置类才会被Spring容器完全处理,其内部定义的Bean才会被创建并注册到IoC容器中。
如何自定义一个Spring Boot Starter
第一步,创建一个新的 Maven 项目,例如命名为 my-spring-boot-starter。在 pom.xml 文件中添加必要的依赖和配置。
第二步,创建一个简单的服务类 MyService.java
第三步,创建一个配置属性类 MyStarterProperties.java
第四步,在 src/main/java
下创建一个自动配置类,比如 MyServiceAutoConfiguration.java:(通常是 autoconfigure 包下)。
第五步,在 src/main/resources/META-INF
目录下创建 spring.factories 文件,指明所有自动配置类的路径
第六步,使用 Maven 打包这个项目
第七步,在其他的 Spring Boot 项目中,通过 Maven 来添加这个自定义的 Starter 依赖,并通过 application.properties 配置MyService的配置信息
Spring Boot Starter的原理了解吗?
Spring Boot Starter 主要通过起步依赖和自动配置机制来简化项目的构建和配置过程。
起步依赖是 Spring Boot 提供的一组预定义依赖项,它们将一组相关的库和模块打包在一起。比如 spring-boot-starter-web
就包含了 Spring MVC、Tomcat 和 Jackson 等依赖。
自动配置机制是 Spring Boot 的核心特性,通过自动扫描类路径下的类、资源文件和配置文件,自动创建和配置应用程序所需的 Bean 和组件。
比如有了 spring-boot-starter-web
,我们开发者就不需要再手动配置 Tomcat、Spring MVC 等,Spring Boot 会自动帮我们完成这些工作。
Spring Boot的启动原理了解吗?
一、启动类准备阶段
加载启动类:SpringBoot启动时,会在当前工作目录下扫描带有@SpringBootApplication注解标识的类,并把这个类作为应用程序的入口点。
二、配置加载阶段
加载配置文件:SpringBoot会自动扫描当前项目的resources目录,并加载其中的application.properties或application.yml等配置文件。加载数据库配置参数,日志级别等。
配置环境:创建和配置Environment,该对象包含了应用程序的运行环境信息。
三、初始化ApplicationContext
创建ApplicationContext:根据应用程序类型创建相应的ApplicationContext实例
加载Bean:扫描当前项目中的所有Bean,将它们注册并创建到ApplicationContext中。扫描并处理Starter的自动配置类,根据类路径下的依赖情况和当前应用Bean的配置情况自动配置并创建相应的Bean
四、启动内嵌的Web容器
如果当前项目是一个Web应用,SpringBoot会根据配置信息自动创建Web容器,并将Spring容器注册到Web容器中
五、启动应用程序
根据之前创建好的Spring容器以及Web服务器,启动相应的线程进行服务处理。
六、监听应用程序的状态
SpringBoot会监听应用程序的状态,并根据需要进行相应的操作。例如,当应用程序退出时,它会打印出详细的日志信息,并将应用程序的上下文环境恢复到初始状态。
七、发布事件
在启动的不同阶段,SpringBoot会发布各种事件,如started()、ready()等,允许开发者在特定的时间点执行自定义的逻辑。
八、停止计时并打印日志
StopWatch停止计时,并打印出整个启动过程所花费的时间。
了解@SpringBootApplication注解吗?
@SpringBootApplication
是 Spring Boot 的核心注解,经常用于主类上,作为项目启动入口的标识。它是一个组合注解:
@SpringBootConfiguration
:继承自@Configuration
,标注该类是一个配置类,相当于一个 Spring 配置文件。@EnableAutoConfiguration
:告诉 Spring Boot 根据 pom.xml 中添加的依赖自动配置项目。例如,如果 spring-boot-starter-web 依赖被添加到项目中,Spring Boot 会自动配置 Tomcat 和 Spring MVC。@ComponentScan
:扫描当前包及其子包下被@Component
、@Service
、@Controller
、@Repository
注解标记的类,并注册为 Spring Bean。
为什么Spring Boot启动的时候能够找到主类上的@SpringBootApplication注解?
启动的时候执行main方法中的run方法,run方法接受两个参数,主应用类、命令行参数。
主应用类也就是main方法属于的类,也就是启动类,SpringBoot会通过反射机制检查这个主应用类,看看上面有没有@SpringBootApplication注解
SpringBoot默认的包扫描路径是什么
启动类所在包及其子包下的所有组件
Spring Boot和Spring MVC区别
Spring MVC是Spring框架的一个模块,提供了Model-View-Controller的开发模式
Spring Boot通过引入Starter依赖并处理自动配置类,实现了约定优于配置的特性,spring-boot-starter-web中集成了Spring MVC的相关依赖,运行时环境也内嵌了Web服务器,所以Spring Boot项目启动后会自动根据类路径下的依赖和当前项目的Bean配置,将Spring MVC的相关配置和组件都自动创建好,快速的开发一个Spring MVC的Web项目。
Spring Boot和Spring有什么区别?
Spring Boot在Spring框架的基础上简化了开发、配置和部署,可以帮助我们快速搭建 Spring 项目的骨架,提高生产效率。
特性 | Spring Framework | Spring Boot |
---|---|---|
目的 | 提供企业级的开发工具和库 | 简化 Spring 应用的开发、配置和部署 |
配置方式 | 主要通过 XML 和注解等手动配置 | 提供开箱即用的自动配置 |
启动和运行 | 需要打成 war 包到 Tomcat 等容器下运行 | 已嵌入Tomcat等容器,打包成 JAR 文件直接运行 |
依赖管理 | 手动添加和管理依赖 | 使用 spring-boot-starter 简化依赖管理 |