Spring Boot学习笔记(知识点总结)

1、什么是springboot?

Spring Boot是一个基于Spring框架的全新项目,旨在帮助开发者更轻松地创建基于Spring的应用程序。它简化了Spring应用程序的初始化和开发过程,使得开发者能够更快速地构建独立、生产级别的应用程序。Spring Boot通过提供默认配置和一系列快捷特性,如自动配置、起步依赖、内置Web服务器等,来降低项目搭建的复杂性。同时,它还集成了大量常用的第三方库配置,使得这些库在Spring Boot应用中几乎可以零配置地开箱即用。

Spring Boot的设计目标是让开发者能够更专注于业务逻辑的开发,而不需要花费过多时间在繁琐的配置和依赖管理上。通过简化配置和提供一系列默认设置,Spring Boot极大地提高了开发效率和生产力。此外,Spring Boot还支持多种部署方式,如独立运行、内嵌Web服务器等,使得应用程序的部署和运维也变得更加简单和方便。

总之,Spring Boot是一个功能强大、易于使用的Spring框架扩展项目,它简化了Spring应用程序的开发和部署过程,为开发者提供了更高效、更便捷的开发体验。

2、springboot的特性

  1. 独立运行:Spring Boot应用程序可以作为独立的可执行JAR或WAR文件运行,这使得部署和分发变得非常简单。
  2. 内嵌Servlet容器:Spring Boot内嵌了Tomcat、Jetty或Undertow等Servlet容器,因此无需将应用程序部署到外部Servlet容器中。
  3. 自动配置:Spring Boot会自动配置Spring应用程序,减少手动配置的工作量。它基于项目中的类路径、属性设置和其他条件来自动配置Bean。
  4. 提供starter简化Maven配置:Spring Boot提供了一系列的“starter”项目对象模型(POMs),这些预定义的依赖项集合大大简化了Maven配置。
  5. 无代码生成和XML配置:Spring Boot尽量避免了繁琐的XML配置和代码生成,而是通过注解、属性文件和YAML文件等方式进行配置。
  6. 应用监控:Spring Boot提供了内置的应用监控功能,如健康检查、指标收集和可视化等。这使得监控和诊断应用程序变得更加容易。
  7. 与外部资源的集成:Spring Boot可以轻松地与外部资源(如数据库、消息队列、缓存等)进行集成,提供了相应的自动配置和starter。
  8. 微服务支持:Spring Boot非常适合构建微服务架构的应用程序,可以与Spring Cloud等项目结合使用,实现服务发现、配置管理、熔断降级等功能。
  9. 快速开发和测试:Spring Boot提供了快速开发和测试的工具和插件,如热部署、自动重启、测试自动化等。

3、SpringFactoriesLoader简介

SpringFactoriesLoader是Spring框架内部提供的一个工厂加载器,用于从指定的配置文件META-INF/spring.factories中加载和实例化指定的类。这种加载方式提供了一种扩展机制,使得开发者可以方便地集成第三方库或插件,而无需修改主程序代码。

具体来说,SpringFactoriesLoader会扫描所有在classpath下的META-INF/spring.factories文件,并根据其中的配置信息创建和返回相应的对象实例。这些配置信息通常以key-value对的形式存在,其中key为接口或抽象类的全限定名,value为实现类的全限定名列表,多个实现类之间通过逗号分隔。

当应用程序需要某个接口或抽象类的实例时,Spring容器会根据SpringFactoriesLoader加载到的配置信息来创建相应的实现类实例,并将其注入到应用程序中。这种机制在Spring Boot的自动配置中得到了广泛应用,使得开发者可以轻松地通过添加或修改配置文件来实现应用程序的定制化配置。

总的来说,SpringFactoriesLoader提供了一种灵活且可扩展的加载机制,使得Spring框架能够更加开放和易于集成第三方库或插件。

4、Springboot spi简介

Spring Boot的SPI(Service Provider Interface)机制是一种服务发现机制,它允许第三方为某些接口提供实现,并在运行时被动态加载和使用。这种机制类似于Java的标准SPI机制,但Spring Boot对其进行了扩展和优化,以更好地适应Spring的生态系统和约定。

在Spring Boot中,SPI机制主要通过META-INF/spring.factories文件来实现。该文件位于classpath下,包含了接口与实现类之间的映射关系。当Spring Boot应用程序启动时,它会扫描所有在classpath下的META-INF/spring.factories文件,并根据其中的配置信息创建和返回相应的对象实例。

具体来说,spring.factories文件中的配置信息通常以key-value对的形式存在,其中key为接口或抽象类的全限定名,value为实现类的全限定名列表,多个实现类之间通过逗号分隔。例如:

com.example.MyService=com.example.MyServiceImpl1,com.example.MyServiceImpl2

上述配置表示com.example.MyService接口有两个实现类:com.example.MyServiceImpl1com.example.MyServiceImpl2。当应用程序需要MyService的实例时,Spring容器会根据这些配置信息创建相应的实现类实例,并将其注入到应用程序中。

需要注意的是,SPI机制并不是Spring Boot独有的特性,而是基于Java平台的一种通用机制。然而,Spring Boot通过集成和优化这种机制,使得开发者能够更加方便地使用和扩展Spring生态系统中的各种组件和插件。

此外,与Java标准的SPI机制相比,Spring Boot的SPI机制具有更好的灵活性和可扩展性。例如,它支持通过条件注解(如@ConditionalOnClass@ConditionalOnMissingBean等)来控制bean的创建和注入条件,从而实现更加精细化的配置和控制。同时,Spring Boot还提供了丰富的自动配置功能,可以自动地根据classpath下的类、属性文件等信息来推断和配置bean的依赖关系,进一步简化了开发者的配置工作。

5、创建一个可以被springboot项目自动装配的jar包简单例子

要创建一个能够被Spring Boot项目自动装配的jar包,你需要遵循Spring Boot的自动配置规范,并在你的jar包中包含适当的自动配置类、条件注解以及META-INF/spring.factories文件。下面是一个简单的步骤指南:

  1. 创建自动配置类
    首先,你需要创建一个或多个自动配置类,这些类将使用@Configuration注解来定义,并且包含创建和配置所需bean的@Bean方法。这些自动配置类应该使用条件注解(如@ConditionalOnClass@ConditionalOnMissingBean@ConditionalOnProperty等)来确保它们只在适当的条件下被加载。

    package com.example.autoconfigure;
    
    import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ConditionalOnClass(MyService.class)
    public class MyServiceAutoConfiguration {
    
        @Bean
        @ConditionalOnMissingBean
        public MyService myService() {
            return new MyServiceImpl();
        }
    }
    
  2. 添加META-INF/spring.factories文件
    在你的项目中,你需要创建一个META-INF/spring.factories文件,并在其中指定你的自动配置类,以便Spring Boot在启动时能够发现它。这个文件应该位于src/main/resources/META-INF/目录下。

    文件内容示例:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    com.example.autoconfigure.MyServiceAutoConfiguration
    

6、springboot常用注解

  1. @SpringBootApplication
    这是Spring Boot项目的核心注解,通常放在主类上。它实际上是@Configuration@EnableAutoConfiguration@ComponentScan的组合。

  2. @EnableAutoConfiguration

    是一个加载Starter目录包之外的需要Spring自动生成bean对象(是否需要的依据是"META-INF/spring.factories"中org.springframework.boot.autoconfigure.EnableAutoConfiguration后面是有能找到那个bean)的带有@Configuration注解的类。一般就是对各种引入的spring-boot-starter依赖包指定的(spring.factories)类进行实例化。

  3. @SpringBootConfiguration
    标记一个类为Spring Boot的配置类。这实际上是@Configuration的一个特化形式,但在Spring Boot项目中更明确地表示这是一个引导配置类。

  4. @ConditionalOn... 系列注解:

    • @ConditionalOnClass:当给定的类名在类路径上存在时,条件成立。

    • @ConditionalOnMissingClass:当给定的类名在类路径上不存在时,条件成立。

    • @ConditionalOnBean:当给定的bean在容器中时,条件成立。

    • @ConditionalOnMissingBean:当给定的bean没有在容器中时,条件成立。

    • @ConditionalOnProperty:当指定的属性有指定的值时,条件成立。

    • 等等。这些注解通常用于自动配置类中,以确保只有在满足特定条件时才进行配置。

  5. @ConfigurationProperties
    将外部配置属性(例如从application.propertiesapplication.yml文件)绑定到一个POJO(Plain Old Java Object)上。这使得管理配置变得非常简单。

  6. @EnableConfigurationProperties
    当你想让@ConfigurationProperties注解的类被Spring容器管理时,你可以使用这个注解来启用它们。通常与@Configuration注解一起使用。

  7. @Endpoint@ReadOperation@WriteOperation@DeleteOperation
    用于创建和管理Actuator端点,这些端点提供了关于应用程序运行时的信息,并且允许你在运行时修改应用程序的状态。这些注解是Spring Boot Actuator模块的一部分。

这些注解大大简化了Spring Boot项目的配置和管理过程,使得开发人员能够更快速地构建和部署生产级的Spring应用程序。

7、Spring Boot Actuator是什么?

Spring Boot Actuator是Spring Boot提供的一个用于监控和管理应用程序的功能模块。它提供了许多生产级别的功能,如健康检查、审计、指标收集、HTTP跟踪等。通过Actuator,开发者可以很方便地对应用程序的某些监控指标进行查看、统计,以及进行其他相关的管理操作。

Actuator的核心是端点(Endpoint),用于监视应用程序及与之交互。Spring Boot中已经内置了非常多的Endpoint,如health、info、beans、metrics、httptrace等。这些Endpoint都可以通过HTTP或JMX(Java Management Extensions)进行访问,但大多数情况下,它们都是通过HTTP的方式进行暴露。每个Endpoint都会被映射为一个URL,其格式为/actuator/{id},其中{id}为Endpoint的ID。

除了内置的Endpoint外,开发者还可以自定义自己的Endpoint来扩展Actuator的功能。要启用或禁用某个Endpoint,可以通过配置文件进行管理。在Spring Boot 2.0及更高版本中,Endpoint的监控机制有所改变,启用了Endpoint并不代表可以直接访问,还需要将其暴露出来。

要使用Spring Boot Actuator,只需在项目中添加相应的依赖即可。在Maven项目中,可以在pom.xml文件中添加spring-boot-starter-actuator依赖。添加依赖后,Actuator将自动配置并暴露出相应的Endpoint供开发者使用。

总的来说,Spring Boot Actuator为开发者提供了一个强大而灵活的工具来监控和管理Spring Boot应用程序。通过它,开发者可以更好地了解应用程序的运行状态并进行相应的优化和调整。

8、ControllerAdvice简介

@ControllerAdvice是Spring框架中的一个注解,用于增强Controller的功能。它可以应用于整个应用程序中的所有Controller,或者通过指定包或注解来应用于特定的Controller。这个注解主要用于全局处理一些共通的操作或处理,例如全局异常处理、全局数据绑定、全局数据预处理等。

示例 1:全局异常处理
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    public ResponseEntity<Object> handleException(Exception ex) {
        // 这里可以记录日志、发送通知等操作
        return new ResponseEntity<>("发生异常:" + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
    
    // 你还可以为特定的异常类型定义处理方法
    @ExceptionHandler(value = CustomException.class)
    public ResponseEntity<Object> handleCustomException(CustomException ex) {
        return new ResponseEntity<>("自定义异常:" + ex.getMessage(), HttpStatus.BAD_REQUEST);
    }
}

在这个示例中,GlobalExceptionHandler类使用了@ControllerAdvice注解,表明它是一个全局异常处理器。它定义了两个@ExceptionHandler方法,分别处理所有类型的Exception和特定的CustomException。当Controller中抛出这些异常时,相应的方法会被调用,并返回一个统一的HTTP响应。

示例 2:全局数据绑定和预处理
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.context.request.WebRequest;

import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;
import java.util.Date;

@ControllerAdvice
public class GlobalDataBinding {

    // 自定义日期格式转换器
    public class CustomDateEditor extends PropertyEditorSupport {
        private final SimpleDateFormat dateFormat;

        public CustomDateEditor(SimpleDateFormat dateFormat) {
            this.dateFormat = dateFormat;
        }

        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            try {
                setValue(dateFormat.parse(text));
            } catch (Exception e) {
                throw new IllegalArgumentException("Could not parse date: " + e.getMessage(), e);
            }
        }
    }

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat));
    }

    @ModelAttribute
    public void addAttributes(WebRequest request) {
        // 这里可以添加全局属性,这些属性会在每个Controller方法执行前添加到模型中
        // 例如:request.setAttribute("currentTime", new Date());
    }
}

在这个示例中,GlobalDataBinding类使用了@ControllerAdvice注解。它定义了一个@InitBinder方法,用于注册自定义的日期格式转换器。这意味着,当请求参数中包含日期类型时,Spring会使用这个自定义的转换器来解析日期字符串。此外,它还定义了一个@ModelAttribute方法,用于添加全局属性。但是注意,在@ModelAttribute方法中,通常我们会使用ModelModelMap参数来添加属性,而不是WebRequest。这里的代码需要相应地调整才能正确工作。正确的做法可能是这样的:

@ModelAttribute
public void addAttributes(Model model) {
    model.addAttribute("currentTime", new Date());
}

这样,在每个Controller方法执行前,都会执行addAttributes方法,将当前时间添加到模型中。但请注意,由于这个示例中的addAttributes方法没有正确的参数类型,它实际上不会按预期工作,需要按照上面的修正来修改。

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习尚硅谷视频整理的文档 Spring Boot 1 1 Spring Boot入门 4 1.1 简介 4 1.2 微服务(martin fowler发表了一篇文章) 5 1.3 环境约束 7 1.4 第一个Spring Boot项目(jar):HelloWorld 8 1.5 入门案例详解 11 1.5.1 POM文件 11 1.5.2 主程序类,主入口类 12 1.6 使用Spring Initializer向导快速创建Spring Boot 16 2 Spring Boot配置 18 2.1 配置文件 18 2.2 YML语法 19 2.3 YML配置文件值获取 21 2.4 properties配置文件乱码问题 24 2.5 @ConfigurationProperties与@Value的区别 25 2.6 配置@PropertySource、@ImportResource、@Bean 27 2.7 配置文件占位符 30 2.8 Profile多环境支持 31 2.9 配置文件的加载位置 33 2.10 外部配置加载顺序 36 2.11 自动配置原理 37 2.12 @Conditional派生注解 41 3 Spring Boot与日志 42 3.1 日志框架分类和选择 42 3.2 SLF4j使用 43 3.3 其他日志框架统一转换成slf4j+logback 44 3.4 Spring Boot日志使用 45 3.5 Spring Boot默认配置 47 3.6 指定日志文件和日志Profile功能 52 3.7 切换日志框架(不使用SLF4j+LogBack) 54 4 Spring Boot与Web开发 55 4.1 Web开发简介 55 4.2 静态资源映射规则 56 4.3 引入Thymeleaf 60 4.4 Thymeleaf语法 61 4.5 SpringMVC自动配置原理 67 4.6 SpringBoot扩展与全面接管 70 4.7 如何修改SpringBoot的默认配置 72 4.8 【实验】CRUD操作 73 4.8.1 默认访问首页 73 4.8.2 登录页面国际化 74 4.8.3 登录 80 4.8.4 拦截器进行登录检查 81 4.8.5 实验要求(没按要求做,不想改了!) 82 4.8.6 CRUD-员工列表 83 4.8.7 CRUD-员工修改 86 4.8.8 CRUD-员工添加 87 4.8.9 CRUD-员工删除 88 4.9 错误处理原理&错误页面定制 90 4.10 配置嵌入式Servlet容器(springboot 1.50版本) 97 4.10.1 如何定制和修改Servelt容器的相关配置 97 4.10.2 注册servlet三大组件【servlet,filter,listener】 98 4.10.3 替换为其他嵌入式容器 102 4.10.4 嵌入式servlet容器自动配置原理 103 4.10.5 嵌入式servlet容器启动原理 103 4.11 使用外置的Servlet容器 104 4.11.1 步骤 104 4.11.2 原理 107 5 Spring Boot与Docker(虚拟化容器技术) 110 5.1 简介 110 5.2 核心概念 111 5.3 安装Docker 112 5.4 Docker常用命令&操作 113 5.5 安装MySQL示例 114 6 Spring Boot与数据访问 115 6.1 JDBC 115 6.1.1 实现 115 6.1.2 自动配置原理 116 6.2 整合Durid数据源 117 6.3 整合Mybatis 122 6.3.1 注解版 123 6.3.2 配置文件版 124 6.4 整合SpringData JPA 125 6.4.1 SpringData简介 125 6.4.2 整合 126 7 Spring Boot启动配置原理 128 7.1 启动流程(Springboot 1.50版本) 128 7.1.1 创建SpringApplication对象 129 7.1.2 运行run方法 130 7.1.3 编写事件监听机制 132 8 Spring Boot自定义starters 136 8.1 概述 136 8.2 步骤 137 9 更多Springboot整合示例 144 10 Spring Boot与缓存 145 10.1 JSR107缓存规范 145 10.2 Spring的缓存抽象 146 10.2.1 基本概念 146 10.2.2 整合项目 146 10.2.3 CacheEnable注解 148 10.2.4 Cache注解 150 10.3 整合redis 154 10.3.1 在Docker上安装redis 154 10.3.2 Redis的Template 154 10.3.3 整合(百度) 155
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值