springBoot核心原理

Posted 吴二喵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springBoot核心原理相关的知识,希望对你有一定的参考价值。

一、配置文件

yaml的写法

##map的写法1
friends: {lastName: zhangsan,age: 18}
##map的写法2
friends:
		lastName: zhangsan
		age: 20
###list、set写法1		
pets:
 - cat
 - dog
 - pig		
###list、set写法2
pets: [cat,dog,pig]
##单引号会将\\n作为字符串输出,双引号会将\\n作为换行输出
##双引号不会转义,单引号会转义

想要代码配置可以提示,添加如下依赖

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

在打包的时候可以exclude相关配置

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

二、Web开发

2.1 静态资源访问

1、静态资源目录
静态资源目录:类路径下如下目录

/static 
/public
/resources
/META-INF/resources

访问:当前项目根路径/+静态资源名

原理:静态映射/**
请求进来,先去controller看能不能处理,不能处理的所有请求又都交给静态资源处理器。

2、静态资源访问前缀
默认无前缀,可以在配置文件中修改
访问路径:当前项目+static-path-pattern+静态资源名=静态资源文件夹下找

spring.mvc.static-path-pattern: /res/**

修改静态资源的存放路径

spring:
  resources:
    static-location: classpath:/haha/

3、webjar
自动映射

WebJars是将web前端资源(js,css等)打成jar包文件,然后借助Maven工具,以jar包形式对web前端资源进行统一依赖管理,保证这些Web资源版本唯一性。WebJars的jar包部署在Maven中央仓库上。

访问地址:webjars/jquery/3.5.1/jquery.js

2.2 欢迎页支持

静态资源路径下 index.html
可以配置静态资源路径;但是不可以配置静态资源的访问前缀,否则导致index.html不能被默认访问。

spring.mvc.static-path-pattern: /res/**

controller能处理/index

2.3 自定义favicon

图标放在静态资源目录下即可

spring.mvc.static-path-pattern: /res/**

也会影响图标的显示

2.4 静态资源配置原理

springBoot启动默认加载xxxAutoConfiguration(自动配置类)
SpringMVC功能的自动配置类 WebMvcAutoConfiguration

@Configuration
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {
    @Configuration
    @Import({WebMvcAutoConfiguration.EnableWebMvcConfiguration.class})
    @EnableConfigurationProperties({WebMvcProperties.class, ResourceProperties.class})
    @Order(0)
    public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ResourceLoaderAware {

配置文件的相关属性和xxx进行了绑定:WebMvcProperties(spring.mvc)和ResourceProperties(spring.resources)

配置类只有一个有参构造器

//有参构造器所有参数的值都会从容器中确定
//ResourceProperties 获取和spring.resources绑定的所有值的对象
//ListableBeanFactory beanFactory springbean工厂
//ResourceHandlerRegistrationCustomizer 找到资源处理器的自定义器
   public WebMvcAutoConfigurationAdapter(ResourceProperties resourceProperties, WebMvcProperties mvcProperties, ListableBeanFactory beanFactory, ObjectProvider<HttpMessageConverters> messageConvertersProvider, ObjectProvider<WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizerProvider) {
            this.resourceProperties = resourceProperties;
            this.mvcProperties = mvcProperties;
            this.beanFactory = beanFactory;
            this.messageConvertersProvider = messageConvertersProvider;
            this.resourceHandlerRegistrationCustomizer = (WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer)resourceHandlerRegistrationCustomizerProvider.getIfAvailable();
        }

以上是关于springBoot核心原理的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot核心原理:自动配置、事件驱动、Condition

SpringBoot核心原理之自动配置

Spring的注解驱动历程以及springboot核心原理

SpringBoot启动机制(starter机制)核心原理详解

springBoot核心原理

springBoot核心原理