Spring Boot原理分析 | SpringApplication、Yaml、Properties

简介: Spring Boot原理分析 | SpringApplication、Yaml、Properties


Spring Boot

Spring开源框架,轻量级的Java开发框架,解决企业级应用开发的复杂性而创建,简化开发

  • 基于POJO的轻量级和最小侵入型编程
  • 通过IOC,依赖注入(DI)和面向接口实现松耦合
  • 基于切面(AOP)和惯例进行声明式编程
  • 通过切面和模板减少样式代码

微服务架构

微服务架构是"新常态":构建小型、独立、随时可以运行的应用程序可以为您的代码带来极大的灵活性和更大的弹性;Spring Boot 的许多专用功能使您可以轻松地在生产环境中大规模构建和运行微服务;微服务是一种现代软件方法,其中应用程序代码以小的、可管理的片段交付,独立于其他部分

自动装配

pom.xml

  • spring-boot-dependencies:核心依赖(导入springboot依赖时,不需要指定版本)

启动器

  • spring-boot-starter-……:启动器(自动导入web环境所有依赖)

主程序

  • @SpringBootApplication:标注这个类是springboot应用
  • SpringApplication.run(Springboot01HelloworldApplication.class, args):将springboot应用启动

注解

  • @Target
@Target用来表示注解作用范围,超过这个作用范围,编译的时候就会报错
@Target(ElementType.TYPE)——接口、类、枚举、注解
@Target(ElementType.FIELD)——字段、枚举的常量
@Target(ElementType.METHOD)——方法
@Target(ElementType.PARAMETER)——方法参数
@Target(ElementType.CONSTRUCTOR) ——构造函数
@Target(ElementType.LOCAL_VARIABLE)——局部变量
@Target(ElementType.ANNOTATION_TYPE)——注解
@Target(ElementType.PACKAGE)——包,用于记录java文件的package信息
  • @Retention
@Retention是用来修饰注解的,注解的注解,也称为元注解
source:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;被编译器忽略
class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期
runtime:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
  • @Documented

指明修饰的注解,可以被例如javadoc此类的工具文档化,只负责标记,没有成员取值

  • @Inherited

标注一个父类的注解是否可以被子类继承,如果一个注解需要被其子类所继承,则在声明时直接使用@Inherited注解即可;如果没有写此注解,则无法被子类继承

  • @SpringBootConfiguration:springboot的配置
  • @Configuration:spring配置类
  • @Component:spring组件(定义Spring管理Bean,标注@Component注解的类交由spring管理)
  • @EnableAutoConfiguration:自动配置
  • @AutoConfigurationPackage:自动配置包
  • @Import({AutoConfigurationImportSelector.class}):导入选择器

流程:

  • SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
  • 将这些值作为自动配置类导入容器 , 自动配置类就生效 , 进行自动配置工作
  • 整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包
  • 容器中导入自动配置类 (xxxAutoConfiguration), 给容器中导入场景需要的所有组件 , 并配置组件
  • 有了自动配置类 , 避免手动编写配置注入功能组件的工作

SpringApplication

  • 推断应用的类型是普通的项目还是Web项目
  • 查找并加载所有可用初始化器 , 设置到initializers属性中
  • 找出所有的应用程序监听器,设置到listeners属性中
  • 推断并设置main方法的定义类,找到运行的主类

Yaml语法

YAML是一个可读性高,用来表达数据序列化的格式;YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感

SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的

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

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

  • XML
<server>
    <port>8081<port>
</server>
  • Yaml
server:
  prot: 8080

@ConfigurationProperties作用

  • 将配置文件中配置的每一个属性的值,映射到这个组件中
  • 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
  • 参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应

@Component

注册bean

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

Yaml和Properties语法

Yaml

  • 配置文件配置和Yaml文件绑定
@ConfigurationProperties(prefix = "person")
  • Yaml文件
Person:
  name: weishuo
  age: 18
  happy: false
  birth: 2002/10/21
  maps: {k1: v1,k2: v2}
  lists:
    - code
    - music
    - girl
  dog:
    name: 旺财
    age: 3

Properties

  • 加载指定的配置文件
@PropertySource(value = "classpath:application.properties")
  • Properties文件
name=weishuo
age=18

多环境配置

  • application.yaml
server:
  port: 8080
spring:
  profiles:
    active: dev
---
server:
  port: 8082
spring:
  profiles: dev
---
server:
  port: 8083
spring:
  profiles: test

首页图标

  • 将ico图片放在resources目录下的static目录中
  • index.html加入link元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link rel="icon" href="1.ico">
</head>
<body>
<h1>首页</h1>
</body>
</html>

Thymeleaf

Thymeleaf是一款流行的Java模板引擎,它提供了一种自然的、HTML标签友好的模板语言,旨在让模板的阅读和编辑更加直观和容易;Thymeleaf可以用于构建Web应用程序,特别是与Spring框架的Spring MVC模块一起使用时,它可以将动态内容渲染到HTML页面中,并处理表单绑定、国际化等常见的Web开发需求

  • HTML标签友好:Thymeleaf使用HTML5兼容的模板语法,模板文件看起来和普通的HTML文件非常相似,易于理解和编辑
  • 支持Spring框架:Thymeleaf与Spring框架无缝集成,支持Spring MVC模块的表单绑定、国际化、安全性等特性
  • 支持静态和动态内容:Thymeleaf可以在HTML文件中包含静态和动态的内容,支持标准的表达式、条件语句、循环语句等常见的编程元素
  • 支持多种模板解析器:Thymeleaf支持多种模板解析器,包括XML、HTML、文本等,满足不同场景下的需求
  • 易于学习和使用:Thymeleaf的语法简单易懂,可以快速上手,而且有详细的官方文档和社区支持

自定义视图解析器

package com.wei.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Locale;
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    //将视图解析器MyViewResolver注入Bean
    @Bean
    public ViewResolver myViewResolver(){
        return new MyViewResolver();
    }
    //自定义视图解析器MyViewResolver
    public static class MyViewResolver implements ViewResolver{
        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            return null;
        }
    }
}

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


目录
相关文章
|
1月前
|
安全 Java Spring
Spring之Aop的底层原理
Spring之Aop的底层原理
|
2月前
|
设计模式 前端开发 Java
【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究SpringMVC的核心原理和运作机制(总体框架原理篇)
【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究SpringMVC的核心原理和运作机制(总体框架原理篇)
34 0
|
2月前
|
XML Java Shell
【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究Spring的核心注解开发和实现指南(Spring5的常见的注解)
【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究Spring的核心注解开发和实现指南(Spring5的常见的注解)
20 1
|
2月前
|
安全 Java 数据安全/隐私保护
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
75 1
|
2月前
|
XML 存储 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache管理器的实战开发指南(修正篇)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache管理器的实战开发指南(修正篇)
29 0
|
2月前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
97 0
|
5天前
|
Java 开发者 微服务
Spring Cloud原理详解
【5月更文挑战第4天】Spring Cloud是Spring生态系统中的微服务框架,包含配置管理、服务发现、断路器、API网关等工具,简化分布式系统开发。核心组件如Eureka(服务发现)、Config Server(配置中心)、Ribbon(负载均衡)、Hystrix(断路器)、Zuul(API网关)等。本文讨论了Spring Cloud的基本概念、核心组件、常见问题及解决策略,并提供代码示例,帮助开发者更好地理解和实践微服务架构。此外,还涵盖了服务通信方式、安全性、性能优化、自动化部署、服务网格和无服务器架构的融合等话题,揭示了微服务架构的未来趋势。
29 6
|
10天前
|
负载均衡 Java 开发者
Spring Cloud:一文读懂其原理与架构
Spring Cloud 是一套微服务解决方案,它整合了Netflix公司的多个开源框架,简化了分布式系统开发。Spring Cloud 提供了服务注册与发现、配置中心、消息总线、负载均衡、熔断机制等工具,让开发者可以快速地构建一些常见的微服务架构。
|
13天前
|
JSON 前端开发 Java
JSON&yaml和Properties
JSON&yaml和Properties
18 0
|
14天前
|
Java Spring 容器
SpringBoot自动装配原理之@Import注解解析
SpringBoot自动装配原理之@Import注解解析
53 0