当前位置: 首页 > ds >正文

SpringBoot基础(原理、项目搭建、yaml)

SpringBoot:javaweb的一个框架,基于Spring开发,SpringBoot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷的开发新一代基于Spring框架的应用程序,它与Spring框架紧密结合用于提升Spring开发者体验的工具。

主要优点:

  • 为所有Spring开发者更快的入门。
  • 提供各种默认配置来简化项目的配置。
  • 内嵌式容器简化web项目。
  • 没有冗余代码生成XML配置的要求。

项目搭建

注意使用的JDK版本,此处需要JDK17才能完成创建,若使用的是JDK8,那需要降低SprnigBoot版本。

法一:在Spring官网中下载,然后将jar包解压,使用idea打开,idea会自动下载jar包

法二:IDEA集成了网站,可以在idea中直接创建一个新项目。

降低版本后测试:

测试环境:

编写Controller类,注意包要放到与启动类同级才能够被识别。其中/hello是接口,作用是接收前端参数,调用业务。

pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--有一个父项目--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><url/><properties><java.version>1.8</java.version></properties><dependencies><!--springboot的依赖都是使用Spring-boot开头--><!--web依赖,集成tomcat、dispatcherServlet、xml--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><!--单元测试--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><!--打jar包的插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

项目元数据信息:创建时候输入的Project.Metadate部分,也就是Maven项目的基本元素,包括groupid、artfactid、version、name、description等。

paent:继承spring-boot-starter-parent的依赖管理,新版本与打包等内容。

dependencie:项目具体依赖,这里包含了spring-boot-starter-web用于实现HTTP接口。使用SpringMVC构建Web应用程序,使用Tomcat作为默认嵌入式容器。

build:构建配置部分,默认使用了spring-boot-maven-plugin,配合spring-boot-starter-parent就可以把SpringBoot应用打包成JAR来直接运行。

可以更改启动时的小图标,利用banner:Spring Boot banner在线生成工具,制作下载英文banner.txt,修改替换banner.txt文字实现自定义,个性化启动banner-bootschool.net

修改端口号:

原理

pom.xml文件中

spring-boot-dependencies:核心依赖在父工程中。

自动导入web环境所有的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

当我们需要使用某种功能时,只需要找到对应的启动器。

主程序

注解@SpringBootApplication标注这个类是一个springboot的应用

//本身就是Spring的一个组件
//启动类
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

注解:

  • @SpringBootConfiguration        //springboot的配置     
    • @Configuration   //表明该类是一个配置类
      • @Component    //表明这是一个Spring组件

  • @EnableAutoConfiguration      //自动配置
    • @AutoConfigurationPackage     //自动配置包

      • @Import({Registrar.class})
        public @interface AutoConfigurationPackage {
            String[] basePackages() default {};

            Class<?>[] basePackageClasses() default {};
        }     //自动配置包注册

    • @Import({AutoConfigurationImportSelector.class})  //自动导入选择
      • List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);   //获取所有的配置

获取候选的配置

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");return configurations;}

自动配置的核心文件:META-INF/spring.factories

Properties properties = PropertiesLoaderUtils.loadProperties(resource);//所有资源加载到配置类中

springboot的所有自动配置都在启动类中被扫描和加载,spring.factories文件中包含了所有的自动配置类,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器,有了启动器,我们的自动装配就会生效,就会配置成功。

  1. springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值。
  2. 将自动配置的类导入容器,自动配置就会生效,会进行自动配置。
  3. 以前我们配置的东西,现在SpringBoot帮我们完成。
  4. 整个javaEE,解决方案和自动配置的东西都在spring-boot-autoconfig这个包下。
  5. 该包会把所有需要导入的组件以类名的方式返回,这些组件就会被添加到容器。
  6. 容器中存在非常多的xxxAutoConfiguration的文件,就是这些类给容器导入了这个场景需要的所有组件,并自动装配。@Configuration  javaConfig
  7. 有了自动配置类,免去了我们手动编写配置文件的工作。

ymal语法

SpringBoot使用一个全局的配置文件,配置文件可以是

  • application.properties
    • 语法结构:key=value
  • application.yaml
    • 语法结构:key:空格value

配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了。

格式对比:

yaml文件可以存储对象(yaml对空格要求严格),properties只能存储键值对。

给实体类赋值

编写Dog实体类:注意:使用注解来写get与set方法时,要引入依赖Lombok

@Component  //把该类添加到Spring组件
@Data   //get、set、无参
@NoArgsConstructor  //显式无参
@AllArgsConstructor //有参
public class Dog {
private String name;
private Integer age;
}
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}

一般给Dog实体类赋值

测试:

使用yaml赋值:

@ConfigurationProperties作用:将配置文件中配置的每一个属性的值,映射到这个组件中,告诉SpringBoot将本类中的所有属性和配置文件只能相关的配置进行绑定。

(prefix = "person"):将配置文件中的person下面的所有属性一一对应。

使用配置文件绑定的时候,需要添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

配置文件配置:使用场景:编写配置类。

松散绑定

yaml中的last-name和lastName是一样的。UUID是随机生成唯一标识符

JSR303效验

在字段增加一层过滤器验证,保证数据的合法性。

在前端<input type="email">中,用户只能输入email形式的内容,但是用户可以绕过前端直接提交数据。使用JSR303效验规范数据格式。

例如:效验email形式的数据

添加依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>    

在实体类中写校验:

常用的JSR303约束注解

JSR303规范内置了一系列的约束注解,用于对数据进行校验,例如:

  • @NotNull:确保字段不为null

  • @Min@Max:确保数字值在一定的范围内

  • @Size:确保字符串的长度在指定的范围内

  • @Email:确保字段是一个电子邮件地址

  • @Pattern:确保字符串符合正则表达式

http://www.xdnf.cn/news/3691.html

相关文章:

  • 【quantity】6 温度单位实现(temperature.rs)
  • wfp CommandParameter 详细解说
  • 数字智慧方案6190丨智慧应急综合平台解决方案(49页PPT)(文末有下载方式)
  • 开发规范-Restful
  • Android面试总结之jet pack模块化组件篇
  • GoogleTest:TEST_F
  • Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战
  • 【OFDM过程中正交子载波特性的应用及全面解析】
  • C++负载均衡远程调用学习之HOOK注册机制
  • deepseek 技巧整理
  • 《Java高级编程:从原理到实战 - 进阶知识篇三》
  • 【算法应用】基于鲸鱼优化算法WOA求解VRPTW问题
  • Oracle无法正常OPEN(三)
  • ARConv的复现流程
  • btrace2.0使用方法
  • 基于FastApi实现本地部署DeepSeek-R1-Distill-Qwen与流式输出
  • 文章四《深度学习核心概念与框架入门》
  • 读书记:《认知红利》
  • 云盘系统设计
  • Vue3+Element Plus全套学习笔记-目录大纲
  • UE自动索敌插件Target System Component
  • MAAS Anvil - 高可用 MAAS 部署管理工具
  • 纳米AI搜索体验:MCP工具的实际应用测试,撰写报告 / 爬虫小红书效果惊艳
  • Matplotlib核心课程-2
  • JavaWeb学习打卡-Day7-正向代理、反向代理、Nginx
  • 使用AI-01开发板和开源后端服务搭建整套小智服务系统
  • 在运行 Hadoop 作业时,遇到“No such file or directory”,如何在windows里打包在虚拟机里运行
  • 赎金信(简单)
  • 单一职责原则(SRP)
  • 安妮推广导航系统开心版多款主题网址推广赚钱软件推广变现一键统计免授权源码Annie