首页 > 其他分享 >SpringBoot基础篇

SpringBoot基础篇

时间:2024-06-17 13:57:42浏览次数:24  
标签:SpringBoot Spring 配置 基础 public Bean 注解 class

SpringBoot

视频链接:

【黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关】https://www.bilibili.com/video/BV14z4y1N7pg?p=20&vd_source=12bdb5b78bd5d1c45cab173f3aad839b

概述

Spring Boot 是 Spring 提供的一个子项目,用于快速构建 Spring 应用程序
在这里插入图片描述

  1. Spring Framework(核心功能)

    • 提供依赖注入、事务管理、Web应用、数据访问等核心支持。
  2. Spring Data(数据存取)

    • 提供一致的方法来访问数据,包括关系型、非关系型、映射化数据等。
  3. Spring Security(认证授权)

    • 通过全面且可扩展的认证和授权功能来保护应用程序。
  4. Spring AMQP(消息传递集成)

    • 应用于基于AMQP协议的消息传递解决方案的开发。
  5. Spring Cloud(服务构建)

    • 提供用于分布式系统中常见模式的工具,适用于构建和管理微服务
  6. Spring Boot(项目构建):

  • 提供了一种有见解的方式来构建Spring应用程序,使其尽可能简单。

特性

  1. 起步依赖

    ​ 本质上就是一个 Maven 坐标,整合了完成一个功能需要的所有坐标

  2. 自动配置

    ​ 遵循约定大于配置的原则,当启动应用程序时,一些bean对象会自动注入到IoC容器中,无需手动声明,从而简化了开发

  3. 其他特性

    • 内嵌的 Tomcat 、 Jetty (无需部署 WAR 文件)

    • 外部化配置

    • 不需要 XML 配置 (properties/yml)

配置文件格式

  • application.properties

    :这是一个经典的Spring Boot配置文件,使用简单的key=value格式来定义属性。例如:

    server.port=8080
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=123456
    
  • application.yml(推荐)

    :这是另一种常见的配置文件格式,使用YAML语法来组织属性。它支持更复杂的数据结构和多行值。,它更加简洁,层次分明,支持列表和复杂对象。例如:

    server:
      port: 8080
    logging:
      level:
        org.springframework: INFO
    

配置文件优先级:application.properties> application.yml

YAML 配置书写规则

  1. 缩进表示层级关系:使用空格进行缩进,不能使用Tab键。
  2. 大小写敏感:键值对中的键是大小写敏感的。
  3. 使用缩进表示列表:列表成员使用"-"加一个空格开始。
  4. 键值对:使用冒号加一个空格(key: value)区分键和值。
  5. 数据类型:支持字符串、整数、浮点数、布尔值、日期、时间、列表和字典等
# 这是一个YAML的注释
name: Zhang San  # 字符串
age: 30          # 整数
married: true    # 布尔值
children:       # 列表
  - name: Li Si
    age: 5
  - name: Wang Wu
    age: 7
address:        # 字典
  city: Beijing
  street: Wangfujing

YAML 配置获取方式

假设 application.yml 中有以下配置:

myapp:
  name: MyApp
  version: 1.0.0

1. 使用 @Value("${键名}")

@Value 注解允许直接将属性值注入到Spring组件中,通过指定键名来获取对应的配置值。它适合用于获取单个属性值或者少量的属性值。

示例用法:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {

    @Value("${myapp.name}")
    private String appName;

    @Value("${myapp.version}")
    private String appVersion;

    public void displayAppInfo() {
        System.out.println("Application Name: " + appName);
        System.out.println("Application Version: " + appVersion);
    }
}

在上面的例子中,@Value("${myapp.name}")@Value("${myapp.version}") 分别获取了 application.ymlmyapp.namemyapp.version 的属性值。

2. 使用 @ConfigurationProperties(prefix="前缀")

@ConfigurationProperties 注解则更适合用于将一组相关的配置属性绑定到一个Java Bean上。它通常用于组织和管理多个配置属性,特别是在配置较复杂的场景下更有用。

示例用法:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {

    private String name;
    private String version;

    // Getters and setters

    public void displayAppInfo() {
        System.out.println("Application Name: " + name);
        System.out.println("Application Version: " + version);
    }
}
  • @Value 适合获取少量的配置值或者动态变化的属性。
  • @ConfigurationProperties 更适合管理和组织大量的配置属性,并且可以通过将它们绑定到一个专门的Java Bean 上来实现类型安全的配置属性访问。

Mybatis整合

SpringBoot整合Mybatis,参见链接后端代码实现部分

SpringBoot+Vue实现增删改查-CSDN博客

Bean管理

Bean扫描

1.XML配置方式
<context:component-scan base-package="com.itheima"/>
  • <context:component-scan> 标签用于指定Spring需要扫描的基础包路径(base-package)。在这个例子中,Spring将扫描 com.itheima 包及其子包,寻找带有特定注解的类,并将它们注册为Spring的Bean。
2.注解配置方式
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.itheima")
public class AppConfig {
    // 配置类,可以在这里添加其他配置
}
  • @ComponentScan(basePackages = "com.itheima") 注解放在配置类(通常是带有 @Configuration 注解的类)上,告诉Spring在 com.itheima 包及其子包中寻找带有特定注解的类,并注册它们为Spring的Bean。
@SpringBootApplication注解

SpringBoot 默认扫描启动类所在的包及其子包

在这里插入图片描述


在这里插入图片描述

@SpringBootApplication 是 Spring Boot 提供的一个组合注解,它包含了以下三个注解的功能:

  1. @SpringBootConfiguration:表明该类是一个配置类,它可以替代 XML 配置文件。它实际上是 @Configuration 注解的一个特殊类型。
  2. @ComponentScan:用于启用组件扫描,寻找带有 @Component 注解的类。如果没有显式地指定 basePackages 参数,它将会扫描当前类所在的包及其子包。
  3. @EnableAutoConfiguration:开启自动配置功能,Spring Boot 将根据项目的依赖性和配置自动配置应用程序。

Bean注册

在这里插入图片描述

如果要注册的 bean 对象来自于第三方(不是自定义的),是无法用 @Component 及衍生注解声明 bean 的,通常可以通过以下方式来实现:

1. 使用 @Import
  • **** 在配置类中,你可以使用 @Bean 注解来显式地定义一个方法,该方法创建并返回第三方类的实例。如果第三方库提供了专门的配置类,你可以直接导入该配置类来注册 Bean。
@Configuration
public class AppConfig {
    @Bean
    public ThirdPartyService thirdPartyService() {
        return new ThirdPartyService();
    }
}
  • 通过 @Import 注解,你可以导入一个或多个配置类,这些配置类中可以包含 @Bean 注解方法,用于注册第三方 Bean。
@SpringBootApplication
@Import(AppConfig.class)//多个配置类导入:@Import(AppConfig1.class,AppConfig2.class)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
2.实现 ImportSelector 接口

如果需要根据条件或其他因素动态地选择性地导入某些配置类或 Bean,可以实现 ImportSelector 接口。这允许你根据运行时的条件来决定哪些配置类应该被导入。

java解释import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;

public class MyImportSelector implements ImportSelector {

    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        // Return an array of class names to import
        return new String[] {ThirdPartyConfig.class.getName()};
    }
}

然后在主配置类中使用 @Import 导入 MyImportSelector 实现类:

java解释import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@SpringBootApplication
@Import({MyImportSelector.class})
public class SpringbootRegistApplication {
    // Application class body
}

注册条件

在这里插入图片描述

1.@ConditionalOnProperty
  • 说明:当配置文件中存在指定的属性时,才会声明该 Bean。
  • 示例:假设你希望某个 Bean 在配置文件中设置了特定属性 myapp.feature.enabled=true 时才被注册,
@Component
@ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true")
public class MyFeatureBean {
    // Bean definition
}

@ConditionalOnProperty 注解有两个主要的属性:

  • name:指定要检查的配置属性名。
  • havingValue:指定配置属性应该具有的值。如果属性的值与 havingValue 指定的值匹配,那么条件成立,Bean 将会被创建。
2.@ConditionalOnMissingBean
  • 说明:当当前上下文中不存在指定类型的 Bean 时,才会声明该 Bean。

  • 示例

    :假设你希望确保在上下文中只有没有特定类型的 Bean 时才注册某个 Bean

    @Component
    @ConditionalOnMissingBean(MyService.class)
    public class MyFallbackService implements MyService {
    	
    }
    
3.@ConditionalOnClass
  • 说明:当当前环境中存在指定的类时,才会声明该 Bean。

  • 示例:假设你的应用程序在运行时需要依赖于某个第三方库的类才能正常工作,ThirdPartyIntegration Bean 只有在类路径中存在 com.example.ThirdPartyClass 类时才会被注册。

    @Component
    @ConditionalOnClass(name = "com.example.ThirdPartyClass")
    public class ThirdPartyIntegration {
        // Bean definition
    }
    

自动配置

遵循约定大约配置的原则,在 boot 程序启动后,起步依赖中的一些 bean 对象会自动注入到 ioc 容器。程序引入 spring-boot-starter-web 起步依赖,启动后,会自动往 ioc 容器中注入 DispatcherServlet

在这里插入图片描述

SpringBoot 自动配置原理

在这里插入图片描述

自定义 starter
  1. 自定义 starter  需求:自定义 mybatis 的 starter 需求
  2. 创建 dmybatis-spring-boot-autoconfigure 模块,提供自动配置功能,并自定义配置文件 META-INF/spring/xxx.imports
  3. 创建 dmybatis-spring-boot-starter 模块,在 starter 中引入自动配置模块

标签:SpringBoot,Spring,配置,基础,public,Bean,注解,class
From: https://blog.csdn.net/2201_76122930/article/details/139689435

相关文章

  • SpringBoot开发Activiti工作流实现审批流程(全套源码)
    前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot+vue+activiti集成了activiti在线编辑器,流行的前后端分离部署开发模式,快速开发平台,可插拔工作流服务。工......
  • 从事网络安全领域吃香吗?零基础入门精通就业,附学习笔记
    吃香是真的会吃香?但是很辛苦。在安服这行工作是做的痛并快乐着。工作是没有轻松的,都是付出和回报成正比的,而且还要不停学习提升,丝毫不敢懈怠。不可能不加班,能正常作息很难,网络安全系列的岗位是IT行业里最辛苦的,接触了太多圈内同行朋友,基本上都是007,996真是福报奢侈,有时候......
  • SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 5000字详解
    Memcached下载和安装是一个国内使用量还是比较大的技术打开文件夹我们需要在命令行窗口启动注意要以管理员方式运行先尝试进入指定文件然后又再次运行下载memcached.exe-dinstall启动memcached.exe-dstart停止memcached.exe-dstopmemcached.exe-din......
  • Vim基础操作:常用命令、安装插件、在VS Code中使用Vim及解决Vim编辑键盘错乱
    Vim模式普通模式(NormalMode):这是Vim的默认模式,用于执行文本编辑命令,如复制、粘贴、删除等。在此模式下,你可以使用各种Vim命令来操作文本。插入模式(InsertMode):在这个模式下,你可以像在普通的文本编辑器中一样输入文本。从普通模式切换到插入模式,可以使用以下命令:......
  • js基础文档
    数据类型数据分为基本数据类型(String,Number,Boolean,Null,Undefined,Symbol)和对象数据类型。基本数据类型的特点:直接存储在栈(stack)中的数据引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里引用数据类型在栈中存储了指针,该指针指向堆中该实体的起......
  • 新手教学系列-​​​​​​基础知识(SSH使用)
    基础知识(SSH使用)什么是sshSecureShell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境[1]。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接[2]。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是......
  • 并发编程理论基础——死锁初阶(四)
    使用细粒度锁可能会导致死锁        死锁:一组互相竞争资源的线程因互相等待,导致永久阻塞的现象如何产生死锁互斥,共享资源X和Y只能被一个线程占用占有且等待,线程T1已经取得了共享资源X,在等待共享资源Y的时候,不释放共享资源X不可抢占,其他线程不能强行抢占线程T1......
  • 使用SpringBoot对接Kafka
    Kafka是什么,以及如何使用SpringBoot对接Kafka一、Kafka与流处理我们先来看看比较正式的介绍:Kafka是一种流处理平台,由LinkedIn公司创建,现在是Apache下的开源项目。Kafka通过发布/订阅机制实现消息的异步传输和处理。它具有高吞吐量、低延迟、可伸缩性和可靠性等优点,使其成为......
  • QT基础 - 常用按钮控件和快捷键
    目录一.QtCreator常用快捷键二. QWidget三. QPushButton四. QRadioButton五. QCheckBox六. QToolButton七.总结一.QtCreator常用快捷键说明快捷键运行ctrl+R编译ctrl+B帮助文档F1,点击F1两次跳到帮助界面跳到符号定义F2或者ctrl+鼠标点击注释ctrl+/字......
  • 基于springboot的球队训练信息管理系统源码数据库
    传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装球队训练信息管理系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,球队训练信息管理系......