SpringBoot 常用注解的原理和使用( 二 )

tomcat的自动配置内置于springboot的autoconfiguration中 。参考tomcat的自动配置 https://www.cnblogs.com/zhaokejin/p/15626392.html
mybatis-plus的配置没有被springboot包括 。因此mybatis-stater中包含一个包mybatis-spring-boot-autoconfigure,这其中配置了需要自动配置的类 。
因此我们也可以在自己的项目下新建 /META-INF/spring.factories,并配置自动配置类 。
@Import@Import 用于导入配置类或需要前置加载的类 。被导入的类会注册为Bean,可直接作为Bean被引用 。它的 value 属性可以支持三种类型:

  • @Configuration 修饰的配置类、或普通类(4.2版本之后可以) 。
  • ImportSelector 接口的实现 。
  • ImportBeanDefinitionRegistrar 接口的实现 。
@Import 的配置
@Configuration@Import(value = https://www.huyubaike.com/biancheng/{TestA.class, TestB.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})public class ConfigurationTest {}导入一个普通类
package com.example.ssmpdemo.entity;public class TestA {public void fun(){System.out.println("testA");}}导入一个配置类
package com.example.ssmpdemo.entity;import org.springframework.context.annotation.Configuration;@Configurationpublic class TestB {public void fun(){System.out.println("testB");}}通过实现 ImportSelector 接口
import org.springframework.context.annotation.ImportSelector;import org.springframework.core.type.AnnotationMetadata;public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"com.example.ssmpdemo.entity.TestC"};}}通过重写 ImportBeanDefinitionRegistrarregisterBeanDefinitions 方法 。
import com.example.ssmpdemo.entity.TestD;import org.springframework.beans.factory.support.BeanDefinitionRegistry;import org.springframework.beans.factory.support.RootBeanDefinition;import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;import org.springframework.core.type.AnnotationMetadata;public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {RootBeanDefinition root = new RootBeanDefinition(TestD.class);registry.registerBeanDefinition("testD", root);}}@ConfigurationProperties
  • 支持常见的下划线、中划线和驼峰的转换 。支持对象引导 。比如:user.friend.name 代表的是user对象中的friend对象中的name
  • 需要有set()方法
  • 只添加 @ConfigurationProperties(prefix = "xxx") 并不会生效,需要配合 @Configuration 让容器识别到 。
  • @EnableConfigurationProperties(value = https://www.huyubaike.com/biancheng/ConfigData.class ) 会将value中指定的类注册为Bean,可直接用 @AutoWired 引用 。
  1. 定义一个类用来记录所有字段,并使用@ConfigurationProperties(prefix = "xxx")将数据注入到ConfigData中 。
package com.example.ssmpdemo.entity;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;/** * 用来记录Configuration的数据 * @author wangc */@Data@ConfigurationProperties(value = "https://www.huyubaike.com/biancheng/spring.datasource.druid")public class ConfigData {private String driverClassName;private String url;private String username;private String password;}# 对应的yml文件spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:5506/ssmpdemo?serverTimezone=UTCusername: rootpassword: xxxx
  1. 使用

    经验总结扩展阅读