美文网首页轻巧
Spring Boot的自动配置原理

Spring Boot的自动配置原理

作者: lynnnnyl | 来源:发表于2022-10-13 15:57 被阅读0次

一、引导加载自动配置类@SpringBootApplication

@SpringBootApplication是@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解的合成注解。

1、@SpringBootConfiguration

打开里面是@Configuration注解,代表当前启动类也是一个配置类

2、@ComponentScan

Spring注解,指定包扫描规则

3、@EnableAutoConfiguration

打开@EnableAutoConfiguration,里面有以下两个注解:

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
3.1 @AutoConfigurationPackage

里面有@Import({Registrar.class}),利用Registrar将MainApplication所在包下的所有组件都导入容器中。

3.2 @Import({AutoConfigurationImportSelector.class})

可以从META-INF/spring.factories位置来加载一个文件:默认扫描当前项目中所有META-INF/spring.factories位置的文件。

二、按需开启自动配置项

虽然127个场景的所有自动配置在启动的时候默认全部加载,但是会通过@Conditional条件装配进行按需加载。

三、修改默认配置

SpringBoot默认会在底层配好所有的组件,但如果用户配置了,以用户的配置优先。

总结:

  • Spring Boot会先加载所有的自动配置类,eg: xxxxAutoConfiguration

  • 每个自动配置类按照@Conditional条件进行生效,并从xxxxProperties取值,xxxxProperties与配置文件绑定。

  • 生效的配置类会向容器中装配很多组件

  • 手动配置默认组件:(一般使用第二种方法)

    1. 用@Bean替换底层的组件
    2. 看该组件在配置文件中获取的变量名,修改application.properties里该变量的值

    xxxxAutoConfiguration——>组件——>xxxxProperties里面取值——>application.properties配置文件

    最佳实践

    • 引入对应场景依赖:

    • 查看自动配置了哪些(选做)

      • 自己分析,引入场景对应的配置类一般都生效了
      • 配置文件中加入debug=true,开启自动配置报告。打印台会输出:Negative表示该配置类不生效,Positive表示生效。
    • 是否需要修改

    • 自定义加入或者替换组件

      • @Bean、@Component
    • 自定义器xxxxCustomizer

开发技巧

1、Lombok——简化JavaBean开发

常用的lombok注解有以下:

@Data:生成已有属性的getter和setter方法,在程序编译的时候自动生成,原代码中不显示

@ToString:重写toString方法

@EqualsAndHashCode:重写hashcode方法

@AllArgsConstructor:全参构造器

@NoArgsConstructor:无参构造器

2、Spring Initializr

快速创建一个Spring Boot项目,不用自己引入starter。

Mybatis Generator&通用Mapper

一、Mybatis Generator

---Mybatis提供的代码生成工具,通过配置generatorConfig.xml文件,执行MyBatis Generator命令,即可自动生成以下三类文件:

  1. 持久化对象(PO),也叫实体文件,可以在配置文件中设置一个数据库表对应生成一个PO类
  2. 操作数据库的接口(DAO),数据库操作方法都在此接口中定义,Mapper类
  3. CRUD sql的Mapper XML配置文件

二、generatorConfig.xml文件

文件结构如下,<generatorConfiguration>以及<context>下的子元素都有严格的顺序。

更详细的解释见:https://blog.csdn.net/isea533/article/details/42102297

1、配置文件头
    
<!DOCTYPE generatorConfiguration PUBLIC
        "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    
2、根节点:<generatorConfiguration>,无任何属性,中间写配置
   
<generatorConfiguration>
    <context>
        <property>...</property>
        <!-- 定义插件 -->
        <plugin>...</plugin>
        <!-- 注释 -->
        <commentGenerator> ... </commentGenerator>
        <!-- jdbc连接 -->
        <jdbcConnection> ... </jdbcConnection>
        <!-- 类型转换 -->
        <javaTypeResolver> ... </javaTypeResolver>
        <!-- 生成实体类配置 -->
        <javaModelGenerator> ... </javaModelGenerator>
        <!-- 生成Mapper.xml文件配置 -->
        <sqlMapGenerator> ... </sqlMapGenerator>
        <!-- 生成Mapper.java 接口-->
        <javaClientGenerator> ... </javaClientGenerator>
        <!-- schema为数据库名,tableName为对应的数据库表名 -->
        <table> ... </table>


    </context>
</generatorConfiguration>

三、通用Mapper

在generatorConfig.xml文件的<context>元素下增加<plugin>元素,type属性可以设置为通用Mapper。在<plugin>元素下设置子元素<property>,可以添加一些自定义配置,自动生成注解和自动添加lombok注解。

<!-- 使用通用mapper提供的插件 -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
    <!-- 所有mapper继承的通用mapper,如果对mapper有进行扩展,可以修改此值 -->
    <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
    <property name="caseSensitive" value="true"/>
    <property name="forceAnnotation" value="true"/>
    <property name="lombok" value="Data"/>
</plugin>

相关文章

网友评论

    本文标题:Spring Boot的自动配置原理

    本文链接:https://www.haomeiwen.com/subject/kuyfzrtx.html