欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot使用自动配置xxxAutoConfiguration

程序员文章站 2022-06-10 15:17:30
常用的类: @conditionalonproperty(name = "use.redis.session.store", havingvalue = "true") @conditio...

常用的类:

  • @conditionalonproperty(name = "use.redis.session.store", havingvalue = "true")
  • @conditionalonclass(session.class)
  • @autoconfigureafter(redisautoconfiguration.class)
  • @conditionalonwebapplication
  • @conditionalonmissingbean(redishttpsessionconfiguration.class)
  • @springbootapplication(exclude ={sessionautoconfiguration.class})

举例:以mybatisautoconfiguration为例

  • 1. 在jar包中/meta-inf/spring.factories中配置
    org.springframework.boot.autoconfigure.enableautoconfiguration=org.mybatis.spring.boot.autoconfigure.mybatisautoconfiguration
    spring在启动时会去自动加载这个bean
  • 2. mybatisautoconfiguration.java上加上@configuration
  • 3. 如果需要通过自定义构造函数来构造bean,则加上构造函数
public mybatisautoconfiguration(mybatisproperties properties,
                                  objectprovider<interceptor[]> interceptorsprovider,
                                  resourceloader resourceloader,
                                  objectprovider<databaseidprovider> databaseidprovider,
                                  objectprovider<list<configurationcustomizer>> configurationcustomizersprovider) {
    this.properties = properties;
    this.interceptors = interceptorsprovider.getifavailable();
    this.resourceloader = resourceloader;
    this.databaseidprovider = databaseidprovider.getifavailable();
    this.configurationcustomizers = configurationcustomizersprovider.getifavailable();
}

构造函数中依赖的bean,spring会自动从spring beanfactory容器中去找到适配的bean来传入

参数:

  • mybatisproperties properties --> 依赖mybatisproperties 这个bean,而mybatisproperties 是一个@configurationproperties。则加上@enableconfigurationproperties(mybatisproperties.class),让bean mybatisproperties 先加载
  • objectprovider<interceptor[]> interceptorsprovider --> 依赖 org.apache.ibatis.plugin.interceptor[],但又不确定 interceptor 的bean是否存在,则通过objectprovider<interceptor[]> 去获取,interceptorsprovider.getifavailable()
  • resourceloader resourceloader --> 依赖 bean resourceloader,直接在 spring 容器中找到相应的 bean
  • objectprovider<databaseidprovider> databaseidprovider --> 同上
  • objectprovider<list<configurationcustomizer>> configurationcustomizersprovider --> 同上

附:断点打在mybatisautoconfiguration 的构造函数上,查看调用栈,便可以看出端倪

以上所述是小编给大家介绍的springboot使用自动配置xxxautoconfiguration,希望对大家有所帮助。在此也非常感谢大家对网站的支持!