SpringBoot使用@EnableAutoConfiguration实现自动配置详解

目录
  • @EnableAutoConfiguration注解
  • 一个简单的案例
  • 总结

@EnableAutoConfiguration注解

其实SpringBoot自动配置的原理主要是用的这个@EnableAutoConfiguration注解,其原理为以下三点:

(1)在@EnableAutoConfiguration注解内部使用@Import(AutoConfigurationImportSelector.class)来加载配置类;

(2)配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当SpringBoot项目启动时,会自动加载这些配置类,初始化Bean;

(3)并不是所有的Bean都会被初始化,在配置类文件中使用Condition来加载满足条件的Bean。

一个简单的案例

上面的原理看上去还是不太好理解的,这个需要查看源码结合理解,接下来我就就一个简单的例子来解释一下。

一个简单的需求:让SpringBoot自动帮我们创建一个User和Role的Bean对象。

第一步,自定义配置类

package cs.yangtze.springboot_enable_other.config;
import cs.yangtze.springboot_enable_other.entity.Role;
import cs.yangtze.springboot_enable_other.entity.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UserConfig {
    @Bean
    @ConditionalOnProperty(name = "lxr",havingValue = "20")
    public User user(){
        return new User();
    }
    @Bean
    public Role role(){
        return new Role();
    }
}

第二步,ImportSelector实现类来加载自定义的配置类,这就对应原理的(1)

package cs.yangtze.springboot_enable_other.config;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportSelect implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
{"cs.yangtze.springboot_enable_other.config.UserConfig"};
    }
}

原理(2)中配置文件位置是这样的,但我们自己自定义的配置文件位置不一样,当SpringBoot项目启动时,会自动加载配置类,初始化Bean

@Import(MyImportSelect.class)
@SpringBootApplication
public class SpringbootEnableApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringbootEnableApplication.class, args);
        Role role =context.getBean(Role.class);
        System.out.println(role);
        User user = context.getBean(User.class);
        System.out.println(user);
    }
}

这时候我们来看一下控制台打印结果:

我们会发现,Role的Bean对象正常打印了,但是User的并没有,这是为什么?

这时候就对应原理(3),并不是所有的Bean都会被初始化,因为我在自定义的UserConfig配置类中,在User上加上了@ConditionalOnProperty(name = “lxr”,havingValue = “20”)条件注解,只有当我的配置文件application.properties中有这个键值对时才能够创建User对象。

最终也是得到正确结果

总结

SpringBoot自动配置的原理就是以上三点,我举的例子应该能够很好地帮助你理解,如果有什么不对的地方还请大家批评指正,这也是我看了几遍视频后的理解。

到此这篇关于SpringBoot使用@EnableAutoConfiguration实现自动配置详解的文章就介绍到这了,更多相关SpringBoot @EnableAutoConfiguration内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot自动配置Quartz的实现步骤

    目录 1. 依赖信息 1.1 原依赖信息 1.2 新的依赖 1.3 依赖变化 2. 新的依赖使用 2.1 默认配置可用 2.2 使用自动配置 2.3 配置信息: 3. 总结 SpringBoot2.0版本之后,其中增加了对Quartz框架的支持内容,可以实现通过容器来自动配置Quartz. 1. 依赖信息 springboot2.x版本时,出现了spring-boot-starter-quartz这一起步依赖,其中提供了很多丰富功能. 1.1 原依赖信息 之前引入quartz框架时,必须引入的依

  • SpringBoot自动配置与启动流程详细分析

    目录 一.自动配置 1. @ComponentScan 2. @SpringBootConfiguration 3. @EnableAutoConfigeration 4. @Condition 总结原理 启动流程 一.自动配置 主启动类 //@SpringBootApplication 来标注一个主程序类 //说明这是一个Spring Boot应用 @SpringBootApplication public class SpringbootApplication { public static

  • Springboot 如何关闭自动配置

    目录 Springboot 关闭自动配置 1. 关闭Redis自动配置 2. SpringBoot默认会自动配置数据库 SpringBoot 开启关闭自动任务配置 1.需求 2.解决方案 Springboot 关闭自动配置 springboot通过@SpringBootApplication 下的@EnableAutoConfiguration 实现自动配置,节约了开发者大量时间,但是有可能有些不必要的配置.如果想关闭其中的某一项配置,那应该怎么办呢? 使用@SpringBootApplicat

  • SpringBoot浅析依赖管理与自动配置概念与使用

    目录 依赖管理 自动版本仲裁 starter启动器 自动配置 说明:基于atguigu学习笔记.部分内容涉及上一章节,请参考以下链接. 上一章:Spring boot 介绍和简易入门 依赖管理 自动版本仲裁 在上一节创建Spring Boot项目时,看到,引入了一个父项目.如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-paren

  • SpringBoot DataSource数据源实现自动配置流程详解

    目录 一.重点概念 1.什么是DataSource数据源 2.数据库连接池 二.导入依赖 三.分析自动配置 1.DataSourceAutoConfiguration类 2.DataSourceTransactionManagerAutoConfiguration类 3.JdbcTemplateAutoConfiguration类 4.JndiDataSourceAutoConfiguration类 5.XADataSourceAutoConfiguration类 四.代码样例 一.重点概念 1

  • SpringBoot自动配置源码深入刨析讲解

    目录 自动配置底层源码分析 总结 自动配置底层源码分析 本次springboot源码来自2.6.6版本. @EnableAutoConfiguration源码解析 在springboot中,当我们引入某个依赖,就可以直接使用依赖里面的类进行自动注入,不需要像ssm框架那样在xml文件中配置各种bean,然后进行关联.像这样我们称之为自动配置.那么自动配置到底配了什么? SpringBoot中的自动配置,更多的是配置各种Bean,同时对于端口号这些配置,一些特定属性SpringBoot也是会提供一

  • springboot自动配置原理以及spring.factories文件的作用详解

    目录 一.springboot 自动配置原理 二.spring.factories文件的作用 spring.factories 的妙用 什么是 SPI 机制? Spring Boot 中的 SPI 机制 Spring Factories 实现原理是什么? Spring Factories 在 Spring Boot 中的应用 一.springboot 自动配置原理 先说说我们自己的应用程序中Bean加入容器的办法: package com.ynunicom.dc.dingdingcontract

  • Springboot @Configuration与自动配置详解

    不知道大家第一次搭SpringBoot环境的时候,有没有觉得非常简单.无须各种的配置文件,无须各种繁杂的pom坐标,一个main方法,就能run起来了.与其他框架整合也贼方便,使用EnableXXXXX注解就可以搞起来了! 所以今天来讲讲SpringBoot是如何实现自动配置的~ @SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot需要运行这个类的main方法来启动SpringBoot应用: 先看

  • SpringBoot整合Web之AOP配置详解

    目录 配置AOP AOP简介 Spring Boot 支持 其它 自定义欢迎页 自定义 favicon 除去某个自动配置 配置AOP AOP简介 要介绍面向切面变成(Aspect-Oriented Programming,AOP),需要先考虑一个这样的场景:公司有一个人力资源管理系统目前已经上线,但是系统运行不稳定,有时运行的很慢,为了检测到底是哪个环节出现问题了,开发人员想要监控每一个方法执行的时间,再根据这些执行时间判断出问题所在.当问题解决后,再把这些监控移除掉.系统目前已经运行,如果手动

  • Springboot内外部logback多环境配置详解

    目录 一.概述 二.项目内外配置 三.使用自定义appender 四.logback查找配置源码 五.案例源码 一.概述 SpringBoot官方文档Springboot 默认读取的是项目内的 resources 中 logback 配置文件.如果 classpath(resources) 下有logback-test.xml会优先生效,并且会和其他logback文件同时生效.Springboot 默认日志级别是DEBUG,所以在logback初始化之前,会有DEBUG日志输出. 二.项目内外配

  • 通过Spring Boot整合Mybatis分析自动配置详解

    前言 SpringBoot凭借"约定大于配置"的理念,已经成为最流行的web开发框架,所以有必须对其进行深入的了解:本文通过整合Mybatis类来分析SpringBoot提供的自动配置(AutoConfigure)功能,在此之前首先看一个整合Mybatis的实例. SpringBoot整合Mybatis 提供SpringBoot整合Mybatis的实例,通过Mybatis实现简单的增删改查功能: 1.表数据 CREATE TABLE `role` ( `note` varchar(25

  • Springboot2.6.x的启动流程与自动配置详解

    目录 一.Springboot启动流程 1. 第一步对SpringApplication的初始化 2. 第二步SpringApplication具体的启动方案 3.refreshContext:核心启动tomcat流程 二.Springboot自动配置原理 1. @SpringBootApplication 2自动配置流程 3.额外注解学习 总结 一.Springboot启动流程 所有的SpringBoot工程,都有自己的启动类,这个启动类身上有一个固定注解@SpringBootApplicat

  • Spring Boot实战教程之自动配置详解

    前言 大家应该都有所了解,随着Ruby.Groovy等动态语言的流行,相比较之下Java的开发显得格外笨重.繁多的配置.低下的开发效率.复杂的部署流程以及第三方技术集成难度大等问题一直被人们所诟病.随着Spring家族中的新星Spring Boot的诞生,这些问题都在逐渐被解决. 个人觉得Spring Boot中最重要的两个优势就是可以使用starter简化依赖配置和Spring的自动配置.下面这篇文章将给大家详细介绍Spring Boot自动配置的相关内容,话不多说,来一起看看详细的介绍. 使

  • Yii2语言国际化自动配置详解

    如何实现语言国际自动化,大家可能觉得自动化,是不是不需要配置就自动切换,这个思路我之前也想过,能不能根据IP来判断地理位置然后确定其语言,网上找过一个"IpToCountry"相关的,有兴趣的可以搜索出来看看,他会提供一个ip对照的表,每隔一段时间会更新一次,不过这个暂时没做,后面考虑尝试下 这里我们说下Yii2如何实现,因为我们上面的一篇文章分享做了语言国际化的配置,也将对应的语言翻译了出来,下面就是需要根据条件来做切换 从配置文件我们知道只需要更改language这个配置值就可以了

  • Springboot框架实现自动装配详解

    目录 序言 从程序的使用去入手分析 序言 springboot框架价值,可以简单快速的构建独立的spring生产级别应用.springboot主要有以下的特性: 1.创建独立的Spring应用 2.直接嵌入Tomcat等Web容器(不需要部署WAR文件) 3.提供固化的“starter”依赖,简化构建配置 4.当条码满足时自动装配Spring货第三方类库 5.提供运维的特性,如指标信息,健康检查和外部配置 6.不需要XML配置. 下面就以springboot启动的时候,是如何实现mybatis自

  • SpringBoot集成mqtt的多模块项目配置详解

    前言 近期为了准备毕设,准备使用SpringBoot搭建mqtt后端,本篇主要记录了在IDEA中搭建SpringBoot mqtt的多模块项目的过程 开发工具及系统环境 IDE:IntelliJ IDEA 2020.2 操作系统:Windows 10 2004 Java Version:1.8 SpringBoot Version:2.1.17.RELEASE 项目路径 Study |----study-common # 存放公共类 |----study-mapper # mapper层 |--

随机推荐