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