SpringBoot学习1:创建SpringBoot工程+自动装配的原理+配置文件(yaml)+ 能够配置什么

简介: SpringBoot学习1:创建SpringBoot工程+自动装配的原理+配置文件(yaml)+ 能够配置什么

创建springBoot工程

image.png

经过这样的步骤我们即可创建一个简单的springBooot项目,我们在它的同级目录下创建controller层,这样我们就实现了一个简单的api接口了

image.png

单击右上角即可运行

项目打包

此时运行maven的install语句即可将项目打包

image.png

之后使用cmd cd到项目编译后的路径下,运行 java -jar xxxxx.jar即可运行

image.png

运行后访问对应地址即可

image.png

自动装配原理

这部分没有理解的很深,大致认为其流程是这样的的,

1)spring事先写好了一些常用的bean,把这些bean放在一个配置文件中

2)spring创建了AutoConfigurationImportSelector类并实现了ImportSelector(spring会把实现了ImportSelector接口类的selectImports的返回值注入到IOC容器中)

3)AutoConfigurationMetadataLoader.loadMetadata 方法从  META-INF/spring-autoconfigure-metadata.properties  文件中加载自动装配的条件元数据,也就是只有满足条件的 Bean 才会被装配

4)autoConfigurationEntry.getConfigurations()方法收集所有符合条件的配置类,进行自动装配

5)Spring使用各种方法去重,去掉不需要的返回集合

6)在@EnableAutoConfiguration 注解内进行import(autoConfigurationEntry)

7)将@EnableAutoConfiguration注解封装在@SpringBootApplication注解内

8)给@SpringBootApplication注解添加@SpringBootConfiguration扫描当前项目下的注解

下面这篇文章写的很好,大家可以看看

https://xie.infoq.cn/article/eee68bfb4f1d3b9d59be1631a2

yaml写法

在springboot项目中Idea默认给我们创建的是application.properties来作为配置文件,而springboot推荐我们使用yaml来做配置,我们可以把application.properties删除掉,创建application.yaml文件

image.png

至于yaml的写法如下图所示

image.png

注意 :后面需添加空格,否则语法错误

如配置启动时的端口号

image.png

传统的对属性进行赋值

创建一个pojo类对其赋值

image.png

在test类中进行测试,发现正常运行

@SpringBootTest
class MyFirstProjectApplicationTests {
    @Autowired
    Dog dog;
    @Test
    void contextLoads() {
        System.out.println(dog);
    }
}

image.png

至此传统方法创建已经完成

使用yaml注入

样例1

在application.yaml中添加

dog:
  name: 王二花
  age: 99

更改dog类中代码为

@Component
@ConfigurationProperties(prefix = "dog")
public class Dog {
    String name;
    int age;
    public Dog() {
    }
    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
get/set。。。。。。。。。。。。。。。。
}

再运行测试发现成功注入

image.png

虽然可以正常运行,但是Dog类中会爆红,虽然不影响运行,但还是有些碍眼

image.png

此时只要导入如下依赖即可解决

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

样例2

在样例1的基础上创建persion类

/**
 * @author 化粪池堵塞的凶手
 */
@Component
@ConfigurationProperties(prefix = "persion")
public class Persion {
    String name;
    int age;
    boolean happy;
    Date date;
    List list;
    Dog dog;
    get/set/构造/tostring。。。。。。。。
}

更改yaml

persion:
  name: 葛帅批
  age: 19
  happy: true
  date: 2001/09/13
  list:
    - code
    - music
    - girl
  dog:
    name: 王大花
    age: 99

更改测试程序

@SpringBootTest
class MyFirstProjectApplicationTests {
    @Autowired
    Persion persion;
    @Test
    void contextLoads() {
        System.out.println(persion);
    }
}

运行结果:

image.png

JSR303校验

首先导入starter

spring-boot-starter-validation

这里的核心注解是@Validated//数据校验

我们修改上一个案例里的persion类:

package com.example.myfirstproject.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
/**
 * @author 化粪池堵塞的凶手
 */
@Component
@ConfigurationProperties(prefix = "persion")
@Validated//数据校验
public class Persion {
    @Email(message = "这不符合邮箱的规则") //依赖于@Validated
    String name;
    int age;
    boolean happy;
    Date date;
    List list;
    Dog dog;
    public Persion(String name, int age, boolean happy, Date date, List list, Dog dog) {
        this.name = name;
        this.age = age;
        this.happy = happy;
        this.date = date;
        this.list = list;
        this.dog = dog;
    }
}

此时再运行上面的测试会发生错误提示

向上翻可以看到:

image.png

将yaml改为如下

persion:
  name: 2898534520@qq.com
  age: 19
  happy: true
  date: 2001/09/13
  list:
    - code
    - music
    - girl
  dog:
    name: 王大花
    age: 99

此时便可以正常运行

在实际开发中的使用流程请参考:

https://cloud.tencent.com/developer/article/1735392

配置文件的位置

配置文件可以存在的位置,优先级如图所示,当同时存在时,优先级高的生效,而优先级低的相同配置无效

1为最高 4为最低

image.png

多环境配置的切换

创建多个配置文件,都使用application-xxx.yaml格式

在里面配置不同端口号

image.png

dev

server:
  port: 8082

test

server:
  port: 8081

这时在application.yaml中配置

spring:
  profiles:
    active: test

此时启动便会加载test中的配置

image.png

配置文件可以配置什么?

配置原理

上面自动装配原理的解析我们可以通过下面这样找到其自动装配的列表

image.png

最后指向了 META-INF/spring.factories这个文件在这个位置

image.png

里面写了自动装配的包

image.png

我们继续查看,发现他们都有这两个注解

其中要特别注意的是红色框中的注解

EnableConfigurationProperties会将后面配置有ConfigurationProperties注解的类通过配置文件赋值以实现之前案例的效果

https://developer.aliyun.com/article/671047

image.png

我们继续查看EnableConfigurationProperties里的参数指向哪里

image.png

发现他们指向的类都包含ConfigurationProperties注解

springboot就是通过此来进行配置的

我们可以在xml中尝试下

image.png

image.png

发现其中的配置都可以在这里找到

特殊配置

debug: true

配置了此类之后在启动项目时便会输出日志,来告诉我们那些类自动配置了,哪些没有自动配置

image.png

生效的 Positive matches:

image.png

未生效的 Negative matches:

image.png

排除的Exclusions:

image.png

无条件的 Unconditional classes:

image.png

           


相关文章
|
10天前
|
Dart 前端开发 JavaScript
springboot自动配置原理
Spring Boot 自动配置原理:通过 `@EnableAutoConfiguration` 开启自动配置,扫描 `META-INF/spring.factories` 下的配置类,省去手动编写配置文件。使用 `@ConditionalXXX` 注解判断配置类是否生效,导入对应的 starter 后自动配置生效。通过 `@EnableConfigurationProperties` 加载配置属性,默认值与配置文件中的值结合使用。总结来说,Spring Boot 通过这些机制简化了开发配置流程,提升了开发效率。
45 17
springboot自动配置原理
|
2月前
|
XML Java 开发者
Spring Boot开箱即用可插拔实现过程演练与原理剖析
【11月更文挑战第20天】Spring Boot是一个基于Spring框架的项目,其设计目的是简化Spring应用的初始搭建以及开发过程。Spring Boot通过提供约定优于配置的理念,减少了大量的XML配置和手动设置,使得开发者能够更专注于业务逻辑的实现。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,为开发者提供一个全面的理解。
50 0
|
1月前
|
存储 人工智能 开发框架
Kheish:开源的多智能体开发框架,通过 YAML 配置工作流和多个 Agent 共同协作解决复杂任务
Kheish 是一个开源的多智能体协调平台,基于大型语言模型(LLM)设计,能够通过灵活配置多个智能体来解决复杂任务。平台支持模块化集成、聊天式提示、反馈循环等功能,适用于代码审计、法律文件分析、客户服务自动化等多种应用场景。
98 18
Kheish:开源的多智能体开发框架,通过 YAML 配置工作流和多个 Agent 共同协作解决复杂任务
|
1月前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
1月前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
119 14
|
2月前
|
Java Spring
SpringBoot自动装配的原理
在Spring Boot项目中,启动引导类通常使用`@SpringBootApplication`注解。该注解集成了`@SpringBootConfiguration`、`@ComponentScan`和`@EnableAutoConfiguration`三个注解,分别用于标记配置类、开启组件扫描和启用自动配置。
74 17
|
2月前
|
Java 容器
springboot自动配置原理
启动类@SpringbootApplication注解下,有三个关键注解 (1)@springbootConfiguration:表示启动类是一个自动配置类 (2)@CompontScan:扫描启动类所在包外的组件到容器中 (3)@EnableConfigutarion:最关键的一个注解,他拥有两个子注解,其中@AutoConfigurationpackageu会将启动类所在包下的所有组件到容器中,@Import会导入一个自动配置文件选择器,他会去加载META_INF目录下的spring.factories文件,这个文件中存放很大自动配置类的全类名,这些类会根据元注解的装配条件生效,生效
|
2月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
3月前
|
Java Spring 容器
springboot @RequiredArgsConstructor @Lazy解决循环依赖的原理
【10月更文挑战第15天】在Spring Boot应用中,循环依赖是一个常见问题,当两个或多个Bean相互依赖时,会导致Spring容器陷入死循环。本文通过比较@RequiredArgsConstructor和@Lazy注解,探讨它们解决循环依赖的原理和优缺点。@RequiredArgsConstructor通过构造函数注入依赖,使代码更简洁;@Lazy则通过延迟Bean的初始化,打破创建顺序依赖。两者各有优势,需根据具体场景选择合适的方法。
183 4
|
3月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
143 2