首页 > 其他分享 >[SpringBoot 1] 自动装配和Run方法

[SpringBoot 1] 自动装配和Run方法

时间:2023-10-01 22:24:25浏览次数:35  
标签:装配 Run SpringBoot spring 配置 yaml 自动 name

SpringBoot 1


阶段:

1 SpringBoot 自动装配

build.gradle 中放依赖核心依赖, 有很多启动器(spring-boot-start-xxx)

@SpringBootApplication
    @SpringBootConfiguration
        @Configuration
            @Component
    @EnableAutoConfiguration
        @AutoConfigurationPackage
            @Import(AutoConfigurationPackages.Registrar.class)
                public void registerBeanDefinitions(AnnotationMetadata metadata
        @Import(AutoConfigurationImportSelector.class)
            public String[] selectImports(AnnotationMetadata annotationMetadata) {
                getAutoConfigurationEntry(annotationMetadata);
                    getCandidateConfigurations(annotationMetadata, attributes);
                        SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader()));
                            loadSpringFactories
                                classLoader.getResources(FACTORIES_RESOURCE_LOCATION);

这里的FACTORIES_RESOURCE_LOCATION, 是写的配置路径: "META-INF/spring.factories"

所有要自动配置的类都在这个文件中(2.7之后的springboot版本中, 在另一个文件中: "META-INF/spring/%s.imports")

当然, spring中有很多第三方需要被自动装配, 但判断自动装配的注解为: @ConditionalOnXXX,是spring的底层注解, 当后面的条件都成立时, 才会被自动装配;

  • 可以在yml中设置: debug: true来查看那些类被自动装配了:

  • 普遍来说, 有一个xxxAutoConfiguration类, 导入xxxProperties类, 定制需要在yml中自己写

2 SpringBoot run方法

run方法比较复杂, 其中也运行了上面自动装配的selectImport方法

run方法的主要事项:

  1. 判断当前项目是普通项目还是web项目(是否一直运行)

  2. 查找并加载所有的初始化器, 设置到Initializer中

  3. 查找并加载所有的应用程序监听器, 设置到Listeners中

  4. 推断并设置main方法的定义类, 并设置主方法

3 yaml配置

#键值对
age: 3 # :后面必须有空格
#对象
student: #对缩进要求严格
    name: xxx
    age: 3
#行内对象
student: {name: xxx,age: 3}
#数组
students:
    - student1
    - student2
#或者: 
students: [student1, student2]

可以通过注解@ConfigurationProperties(prefix = 'student') 读取配置

  • 第二种不标准的方式: 可以指定别对名字, 然后使用SPEL表达式取值操作

写my.yaml文件

在某个配置类上写@PropertiesSource(value = 'classpath:my.yaml', factory可以指定是json还是yaml等文件的PropertySourceFactory读取类型)读取自定义的配置文件, 在类的field上写@name("$name")来取出对应的值;

  • yaml中也可以写EL表达式: 比如:
age: ${radom.uuid}# uuid值
name: ${my.name: zidingyi}#my.name存在则为第一个值, 否则为zidingyi
  • 松散绑定

yaml中写last-name, 配置中写lastName, 可以自动对应

  • JRS303数据校验

    配置类上写@Validated, field上写@NotNull之类的

    或者对于req类, 有自己的写法, 很简单搜一搜就行

  • 对于不同的环境, 可以选择激活的配置文件

    如: 有application-dev.yml, application-staging.yml

    需要使用dev环境的配置

    则在默认的applicaiton.properties/yml中指定

    spring.profiles.active=dev

  •  也可以使用---来分割不同的配置块, 在第一块中指定active的环境, 其他块中写spring.profiles=dev等(不推荐使用了)

    eg:

4 扩展或自定义WebMvcConfiguration

可方便自己实现全局的配置管理

不需要添加注解在自定义类上@EnableWebMvc

@Configuration
public MyMvcConfig implements WebMvcConfigurer {
    //可扩展自己的viewResolvers or 日期格式化Formatter etc.然后以@Bean的方式注入进来
}

5 国际化

resource目录下添加 i18npackage, 添加一个文件的name.properties, 再添加一个name_zh_CN.properties, 会自动识别成Resource Bundle, 下载插件, 就可以编辑添加多种文件。

固定配置 :application中配置 spring.messages.basename

自选配置: 自己写LocalResolver, 注入自己的MyMvcConfig使用

标签:装配,Run,SpringBoot,spring,配置,yaml,自动,name
From: https://www.cnblogs.com/Roy2048/p/17739361.html

相关文章

  • compattelrunner.exe 是 Windows 操作系统中的一个可执行文件。它是 Microsoft 官方提
    compattelrunner.exe是Windows操作系统中的一个可执行文件。它是Microsoft官方提供的用于收集计算机性能数据和故障排除的工具,这些数据旨在帮助Microsoft监测和改进Windows操作系统。Compattelrunner.exe的主要功能如下:收集数据:它定期扫描计算机上的所有文件和程序,并......
  • springboot 与 Redis整合
    SpringBoot操作数据:Spring-datajpajdbcmongodbredis!SpringData也是和SpringBoot齐名的项目!说明:在SpringBoot2.X之后,原来使用的jedis被替换成了lettucejedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用jedispool连接池,更新BIO模式lettuce:采用ne......
  • springboot web开发静态资源的映射规则
    前言我们之间介绍过SpringBoot自动配置的原理,基本上是如下:xxxxAutoConfiguration:帮我们给容器中自动配置组件;xxxxProperties:配置类来封装配置文件的内容;web开发中都在org.springframework.boot.autoconfigure.web包下今天看的静态资源映射规则都在org.springframework.boot.aut......
  • springboot web开发整合Freemarker 模板引擎
    目录Freemarker添加依赖配置文件ymlcontrollerhtmlFreemarker简介:FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组......
  • springboot 与异步任务,定时任务,邮件任务
    异步任务在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring3.x之后,就已经内置了@Async来完美解决这个问题。SpringBoot实现比较简单主启动类:添加注释......
  • Can't delete myfile.mexw64 after run mexw64?
    Ifoundmyanswer,this".mexw64"cannotbedeletedafterusingclear,butcanbedeletedafterusingclearallfromhttps://www.mathworks.com/matlabcentral/answers/1563471-can-t-delete-myfile-mexw64-after-run-mexw64......
  • springboot web开发springmvc自动配置原理
    前言我们也知道springboot启用springmvc基本不用做什么配置可以很方便就使用了但是不了解原理,开发过程中遇到点问题估计就比较头疼,不管了解的深不深入,先巴拉一番再说…下面我们先看看官网…我的版本是2.3.2版本,发现官网改动也比较大…不同版本自己巴拉下吧,结构虽然变化了,但......
  • springboot web开发登录拦截器
    在SpringBoot中我们可以使用HandlerInterceptorAdapter这个适配器来实现自己的拦截器。这样就可以拦截所有的请求并做相应的处理。应用场景日志记录,可以记录请求信息的日志,以便进行信息监控、信息统计等。权限检查:如登陆检测,进入处理器检测是否登陆,如果没有直接返回到登陆页面。性......
  • SpringBoot框架大晚上报错404--我的路径问题(附上SpringBoot MVC管理系统的简单具体代
    代码application.ymlspring:web:resources:static-locations:classpath:/static/,classpath:/templates/datasource:type:com.alibaba.druid.pool.DruidDataSourceurl:jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf......
  • springboot整合mybatisPlus全技巧(1-整合过程)
    本文基于springboot整合mybatisPlus的各种文章早已烂大街的背景下,根据整合过程,MP开发中的常见技巧,MP开发中遇到的各种坑三个方面,来对这一专题做一个全面且实用的总结,基本上只要你吃透这篇文章,开发中关于mybatisplus你能遇到的问题都能迎刃而解了。整合过程网上对于springboot......