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

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:确保字符串符合正则表达式

相关文章:

  • 【C++】红黑树迭代版
  • 阿里发布新一代通义千问 Qwen3模型
  • 第 5 篇:红黑树:工程实践中的平衡大师
  • btrace2.0使用方法
  • 多模态大语言模型arxiv论文略读(五十四)
  • 大模型在终末期肾脏病风险预测与临床方案制定中的应用研究
  • 架构进阶:深入学习企业总体架构规划(Oracle 战略专家培训课件)【附全文阅读】
  • 解决C4D中ProRender渲染黑屏
  • Linux运维中常用的磁盘监控方式
  • STL之vector容器
  • Java语言概述
  • 52、【OS】【Nuttx】【OSTest】setvbuf 测试
  • mysql索引及数据库引擎
  • MySQL 第一讲---基础篇 安装
  • 第7篇:RESTful API设计与安全防护
  • 赎金信(简单)
  • 第十六届蓝桥杯 2025 C/C++组 客流量上限
  • 【CTFer成长之路】XSS的魔力
  • 【Java IO流】File类基础详解
  • 瑞萨 EZ-CUBE2 调试器
  • 保持高位运行,今天全国铁路预计发送旅客1800万人次
  • 在“蟑螂屋”里叠衣服,我看见人生百态
  • 国内锂矿“双雄”开局业绩PK:从巨亏中崛起,或深陷泥淖谋求多元转型
  • 秦洪看盘|资金切换主线,重构市场风格
  • 中央网信办部署开展“清朗·整治AI技术滥用”专项行动
  • 马克思主义理论研究教学名师系列访谈|杜玉华:马克思主义是“认识世界”和“改变世界”的思维工具