
SpringBoot是一个简化 Spring 应用程序开发的框架它的主要目标是减少 Spring 应用程序的配置和开发复杂性使我们能够更快地构建、测试和部署 Spring 应用。简单来说它通过提供默认配置、自动化配置和嵌入式服务器等功能简化了传统Spring 应用的繁琐配置过程。有人将一些依赖关系、默认配置都梳理好了我们直接一个引用就搞定了这就是它的本质。Springboot的优点内置Web容器内置servlet容器不需要在服务器部署 tomcat。只需要将项目打成 jar 包使用 java -jar xxx.jar一键式启动项目内置Starter和自动配置SpringBoot提供了starter把常用库聚合在一起简化复杂的环境配置快速搭建spring应用环境零XML配置 Spring Boot采用JavaConfig的方式进行开发不需要编写大量的XML配置文件。这种零XML的开发方式让开发更加简洁和可读同时提高了可维护性。微服务支持 Spring Boot与Spring Cloud结合使用可以轻松快速构建和部署微服务架构。依赖版本管理 Spring Boot帮助开发人员管理了常用第三方依赖的版本防止出现版本冲突问题。这样您可以更专注于业务逻辑而不用担心依赖的版本兼容性。监控和管理 Spring Boot自带了监控功能包括应用程序运行状况监控、内存使用情况、线程池状态、HTTP请求统计等。此外Spring Boot还提供了优雅关闭应用程序的方式使得应用程序的管理更加便捷。SpringBoot总结就是使编码变简单、配置变简单、部署变简单、监控变简单等等Spring Boot 需要独立的容器运行吗可以不需要内置了 Tomcat/ Jetty 等容器。Javaweb、spring、springmvc和springboot有什么区别都是做什么用的JavaWeb是 Java 语言的 Web 开发技术主要用于开发 Web 应用程序包括基于浏览器的客户端和基于服务器的 Web 服务器。Spring是一个轻量级的开源开发框架主要用于管理 Java 应用程序中的组件和对象并提供各种服务如事务管理、安全控制、面向切面编程和远程访问等。它是一个综合性框架可应用于所有类型的 Java 应用程序。SpringMVC是 Spring 框架中的一个模块用于开发 Web 应用程序并实现 MVC模型-视图-控制器设计模式它将请求和响应分离从而使得应用程序更加模块化、可扩展和易于维护。Spring Boot是基于 Spring 框架开发的用于开发 Web 应用程序的框架它帮助开发人员快速搭建和配置一个独立的、可执行的、基于 Spring 的应用程序从而减少了繁琐和重复的配置工作。综上所述JavaWeb是基于 Java 语言的 Web 开发技术而 Spring 是一个综合性的开发框架SpringMVC用于开发 Web 应用程序实现 MVC 设计模式而 Spring Boot 是基于 Spring 的 Web 应用程序开发框架。运行 SpringBoot 有哪几种方式相关原理可以查看两种方式启动原理IDEA中main函数启动用 Maven/Gradle 插件运行java -jar XXX.jarSpring Boot 打成的 jar 和普通的 jar 有什么区别 ?Spring Boot 项目最终打包成的 jar 是可执行 jar 这种 jar 可以直接通过java -jar xxx.jar命令来运行这种 jar 不可以作为普通的 jar 被其他项目依赖即使依赖了也无法使用其中的类。Spring Boot 的 jar 无法被其他项目依赖主要还是他和普通 jar 的结构不同。普通的 jar 包解压后直接就是包名包里就是我们的代码而 Spring Boot 打包成的可执行 jar 解压后在\BOOT-INF\classes目录下才是我们的代码因此无法被直接引用。如果非要引用可以在 pom.xml 文件中增加配置将 Spring Boot 项目打包成两个 jar 一个可执行一个可引用。为什么SpringBoot的jar可以直接运行Spring Boot的可执行JAR文件之所以可以直接运行原因如下Spring Boot提供了一个Maven插件spring-boot-maven-plugin用于将应用程序打包成可执行的JAR文件。通过执行mvn clean package等命令可以轻松生成可执行JAR。打包生成的JAR文件通常是Fat JAR或Uber JAR这意味着它包含了应用程序的所有依赖项包括第三方库和Spring Boot框架本身。这样JAR文件就成了一个自包含的单一文件。JAR文件包含一个名为MANIFEST.MF的清单文件其中包含了关于JAR文件的元数据信息。其中主要的信息是Main-Class它指定了启动应用程序的主类。Spring Boot的可执行JAR文件通常由JarLauncher类启动。JarLauncher负责创建一个类加载器LaunchedURLClassLoader加载boot-lib目录下的JAR文件包括Spring Boot loader相关的类。然后它在一个新线程中启动应用程序的Main方法实现应用程序的启动。、当执行Main方法最终会加载Spring容器、进而创建内嵌Tomcat进行阻塞线程使我们jar包完成web应用的启动SpringBoot 常用的 Starter 有哪些spring-boot-starter-web 提供 Spring MVC 内嵌的 Tomcat 。spring-boot-starter-data-jpa 提供 Spring JPA Hibernate 。spring-boot-starter-data-Redis 提供 Redis 。mybatis-spring-boot-starter 提供 MyBatis 。SpringBoot 中的 starter 到底是什么 ?个人理解SpringBoot就是由各种Starter组合起来的我们自己也可以开发Starter在sprinBoot启动时由SpringBootApplication注解会自动去maven中读取每个starter中的spring.factories文件,该文件里配置了所有需要被创建spring容器中的bean并且进行自动配置把bean注入SpringContext中 //SpringContext是Spring的配置文件首先它提供了一个自动化配置类一般命名为 XXXAutoConfiguration 在这个配置类中通过条件注解来决定一个配置是否生效条件注解就是 Spring 中原本就有的然后它还会提供一系列的默认配置也允许开发者根据实际情况自定义相关配置然后通过类型安全的属性(spring.factories)注入将这些配置属性注入进来新注入的属性会代替掉默认属性。正因为如此很多第三方框架我们只需要引入依赖就可以直接使用了。当然开发者也可以自定义 StarterSpringBoot如何自定义Starter在开发分布式Springboot项目时 自定义Starter是一定会用到的。以下是创建自定义Spring Boot Starter的基本步骤创建项目结构 创建一个Maven或Gradle项目确保项目结构符合标准的约定。通常项目结构包括src/main/java用于存放Java代码和src/main/resources用于存放资源文件。编写自动配置类 创建一个自动配置类该类负责配置自定义Starter的功能。在自动配置类上使用Configuration注解并通过其他注解如ConditionalOnClass、ConditionalOnProperty等来定义条件以确保只有在满足特定条件时才会应用配置。提供属性配置 如果您的Starter需要配置属性可以在src/main/resources/application.properties或src/main/resources/application.yml中定义属性。这些属性可以在自动配置类中使用Value注解注入。创建META-INF/spring.factories文件 在项目的资源目录中创建META-INF/spring.factories文件。在这个文件中注册您的自动配置类以便Spring Boot能够自动识别和加载它。定义Starter依赖 在自定义Starter的pom.xml文件中定义Spring Boot的核心依赖以及您的Starter所依赖的其他库。测试和文档 编写单元测试和集成测试以确保自定义Starter的功能和配置正确。同时提供详细的文档和示例以便用户能够正确配置和使用您的Starter。发布到仓库 将自定义Starter打包并发布到Maven中央仓库或私有仓库以便其他项目可以引入和使用。自定义一个Spring Boot Starter需要遵循上述步骤其中创建META-INF/spring.factories文件是关键因为它告诉Spring Boot如何自动装配您的功能。这样其他项目可以方便地引入您的Starter实现功能的快速集成。SpringBoot与SpringCloud 区别SpringBoot是快速开发的Spring框架SpringCloud是完整的微服务框架SpringCloud依赖于SpringBoot。SpringBoot注解Spring Boot 的核心注解是哪个启动类上面的注解是SpringBootApplication它也是 Spring Boot 的核心注解主要组合包含了以下 3 个注解SpringBootConfiguration组合了 Configuration 注解实现配置文件的功能。EnableAutoConfiguration打开自动配置的功能也可以关闭某个自动配置的选项如关闭数据源自动配置功能 SpringBootApplication(exclude { DataSourceAutoConfiguration.class })。ComponentScanSpring组件扫描。有哪些常用的SpringBoot注解SpringBootApplication这个注解是Spring Boot最核心的注解用在 Spring Boot的主类上标识这是一个 Spring Boot 应用用来开启 Spring Boot 的各项能力SpringBootConfiguration组合了 Configuration 注解实现配置文件的功能。EnableAutoConfiguration打开自动配置的功能也可以关闭某个自动配置的选项如关闭数据源自动配置功能 SpringBootApplication(exclude { DataSourceAutoConfiguration.class })。ComponentScanSpring组件扫描。Repository用于标注数据访问组件即DAO组件。Service一般用于修饰service层的组件RestController用于标注控制层组件(如struts中的action)表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器它是Controller和ResponseBody的合集。ResponseBody表示该方法的返回结果直接写入HTTP response body中Component泛指组件当组件不好归类的时候我们可以使用这个注解进行标注。Bean相当于XML中的bean/bean,放在方法的上面而不是类意思是产生一个bean,并交给spring管理。AutoWiredbyType方式。把配置好的Bean拿来用完成属性、方法的组装它可以对类成员变量、方法及构造函数进行标注完成自动装配的工作。Qualifier当有多个同一类型的Bean时可以用Qualifier(name)来指定。与Autowired配合使用Resource(namename,typetype)没有括号内内容的话默认byName。与Autowired干类似的事。RequestMappingRequestMapping是一个用来处理请求地址映射的注解提供路由信息负责URL到Controller中的具体函数的映射可用于类或方法上。用于类上表示类中的所有响应请求的方法都是以该地址作为父路径。RequestParam用在方法的参数前面。RequestBody将 HTTP 请求体中的数据绑定到方法参数上。Spring 会将JSON、XML或其他格式的请求体转换为Java 对象并将其传递给控制器方法的参数。PathVariableSpring MVC 中用于从URI 模板中提取变量值的注解。它的主要作用是在处理 HTTP请求时从请求的URL 路径中捕获变量并将其绑定到控制器方法的参数上Scope用于声明一个SpringBean实例的作用域Primary当同一个对象有多个实例时优先选择该实例。PostConstruct 用于修饰方法当对象实例被创建并且依赖注入完成后执行可用于对象实例的初始化操作。PreDestroy用于修饰方法当对象实例将被Spring容器移除时执行可用于对象实例持有资源的释放。EnableTransactionManagement启用Spring基于注解的事务管理功能需要和Configuration注解一起使用。Transactional表示方法和类需要开启事务当作用与类上时类中所有方法均会开启事务当作用于方法上时方法开启事务方法上的注解无法被子类所继承。ControllerAdvice常与ExceptionHandler注解一起使用用于捕获全局异常能作用于所有controller中。ExceptionHandler修饰方法时表示该方法为处理全局异常的方法。Profile用于定义一组 Bean 的配置文件所属的环境比如 dev 通常表示开发环境prod 表示生产环境Validated 和 Valid 注解有什么区别?Validated 和 Valid 都是用于在 Spring 中执行对象验证的注解但它们的使用场景和特性有一些区别Validated这是标准的 Java Bean Vlidation注解来自javax.vlidation注解。它通常用于方法参数或类的字段上以触发基于注解的验证规则如(NotNull、Size等)在Sping中它可以用于验证单个对象或嵌套对象。Valid这是 Sping 特有的注解来自org.springframework.vlidation.annotation.Vlidated包它的主要作用是支持分组验证(Group Vlidation)允许开发者根据不同的场景定义不同的验证逻辑。它也可以用在类级别、方法参数上触发不同验证组的规则。Value注解的原理在 Spring 框架中Vàlue 注解用于注入外部化的配置值到 Spring 管理的 Bean 中。通过 Value 注解可以将属性文件、环境变量、系统属性等外部资源中的值注入到 Spring Bean 的字段、方法参数或构造函数参数中。Value的解析就是在bean初始化阶段。BeanPostProcessor定义了bean初始化前后用户可以对bean进行操作的接口方法它的一个重要实现类AutowiredAnnotationBeanPostProcessor为bean中的Autowired和Value注解的注入功能提供支持。PropertySource 注解的作用是什么?是 Spring 中用于加载外部属性文件(如.properties 文件)的注解。它的主要作用是让 Spring 应用程序可以从外部的属性文件中读取配置并将这些属性注入到 Spring 的 Environment 中从而实现应用的外部化配置使得应用程序在不同环境下更容易管理和维护。方便通过Value 或 Environment 对象获取属性值Scheduled 注解的作用是什么?这个注解用于在 Spring 应用中定时执行方法。它可以将某个方法标记为一个定时任务并根据设定的时间间隔、固定速率、或 Cron 表达式来定时触发该方法的执行。主要作用:定时任务执行 Scheduled 注解允许开发者定义一个方法该方法会按照指定的时间规则定期执行。支持多种时间配置支持固定延迟、固定速率以及基于Cron 表达式的任务调度。Cacheable 和 CacheEvict 注解的作用是什么?Cacheable 和 CacheEvict 是Spring中用于缓存操作的两个重要注解主要用于提高系统性能通过减少对数据库等外部资源的频繁访问。Cacheable用于将方法的返回结果缓存起来。下次再调用相同参数的方法时直接从缓存中获取结果而不是重新执行该方法。CacheEvict用于从缓存中移除一项或多项数据通常在更新或删除操作时使用确保缓存中的数据保持一致性。Conditional 注解的作用是什么?作用于有条件地装配 Bean。可以根据特定的条件来决定某个 Bean 是否应该被加载到 Spring 容器中。例如可以