@EnableAutoConfiguration作用原理 参考: 深入理解SpringBoot(一) 自动配置 springboot2.0自动注入文件spring.factories如何加载详解 先看springboot2.0 ,把每个包内的META-INF/spring.factories读取,并把org.springframework.boot.autoconfigure.EnableAutoConfiguration的自动配置类都读取 AutoConfigurationImportSelector.selectImports本身只是读取值,将要加载的自动配置类数组返回,而并不负责加载。返回该数组后,框架就会将其加载。 【prefix = "person"】表示与配置文件中哪个层级的属性进行绑定。 当一些属性不想配置到主配置文件,需自定义一个配置文件,需通过@PropertySource注解指定此配置文件路径。 这个文件毕竟是spring-boot-autoconfigure-processor自动生成的,用于spring加快加载速度用的,我们只要会用就好,不必过于关注其原理。
自动配置知识点 总结起来要理解下面几个: 4个配置文件 spring.factories spring-configuration-metadata.json和additional-spring-configuration-metadata.json 也可以点开大图保存到本地查看: 自动配置全图解 总结 spring-configuration-metadata.json和spring-autoconfigure-metadata.properties
什么是自动配置? 自动配置的意义就是加速开发效率,将开发者使用某种技术时需要使用的bean根据情况提前加载好,实现自动配置的效果。 自动配置的核心文件之一,它的作用是将各种自动配置类与对应的配置类集中在一起,方便Spring Boot自动装配。 该文件的格式为键值对,键是自动配置类的全限定名,值是该自动配置类所对应的配置类的全限定名。 如果没有默认值,就强制你必须配置后使用了 自动配置是指Spring Boot根据开发者的行为和导入的类,自动推断和准备需要使用的bean。
自动配置 pom.xml spring-boot-dependencies :核心依赖在父工程中 我们在写或者引入一些Spring Boot依赖的时候,不需要指定版本,就因为有这些版本仓库 启动器 <dependency @Configuration : Spring配置类 @Component : 也是一个Spring的组件 @EnableAutoConfiguration : 自动配置 @AutoConfigurationPackage : 自动配置包 @Import({Registrar.class}) : 自动配置 `包注册` @Import({AutoConfigurationImportSelector.class }) : 自动配置导入选择 //获取所有的配置 List<String> configurations = this.getCandidateConfigurations(annotationMetadata make sure that file is correct."); return configurations; } META-INF/spring.factories :自动配置的核心文件
概述自动配置是SpringBoot框架中的核心之一,其目的是将我们开发中引入的jar包类和自己编写的业务类自动注入到IoC容器中,而无需像我们的Spring一样,需要在配置文件中进行繁杂冗余的配置。 移除获取的自动配置类列表名中重复的项根据注解元数据和注解的属性,获取所有要被排除的自动配置类。 根据获取要排除的自动配置类和可能要引入的自动配置类进行检查是否确定要配出,如果不确定那么就会抛出异常;如果确定那么就会继续执行移除所有要被排除在外的自动配置类内容。 使用配置类过滤器将配置类列表中不需要的配置项进行过滤,可能根据一些条件注解等其他方式来排除。触发自动配置导入事件,允许其他组件监听并响应自动配置的导入过程。 从上述两张图片结合代码可以看出,我们会将自动配置包的全路径类型放入一个统一个文件路径+文件名下面,所以代码在进行查找时,就会把所有的、无论哪个包下的自动配置文件中的全部类全部导入进去,我们就能实现轻松的自动配置
springboot自动配置 引 言 Spring Boot的一个强大功能是它能够根据我们添加到类路径中的jar依赖项自动配置我们的应用程序。 在这篇文章中,我们将介绍Spring Boot自动配置功能,并了解它如何在开发周期中提供帮助。 介绍 可以从提出非常简单的问题开始,为什么我们需要Spring Boot自动配置? 自动配置将尝试根据类路径中的jar自动尝试使用默认行为设置我们的应用程序。 例如,如果Spring Boot在类路径中找到HSQLDB,它将自动为我们配置内存数据库。 此文件包含将由Spring Boot自动启用的自动配置类的列表。 Spring Boot自动配置的比较好的点是它具有无创性,你可以通过自定义自己的配置以替换默认自动配置。
,这样自动配置才能生效。 配置类有关,承担了自动配置的主要逻辑。 配置类有关,承担了自动配置的主要逻辑。 条件评估报告器对象来记录符合条件的自动配置类; 【5】 最后再将符合条件的自动配置类返回。 exclude 的自 动配置类,然后再排序 最后,我们再总结下SpringBoot自动配置的原理,主要做了以下事情: 从spring.factories配置文件中加载自动配置类; 加载的自动配置类中排除掉
配置属性类 @Data @Component @ConfigurationProperties(prefix = "interceptor.token") public class TokenProperty pathPatterns; private String excludePath; private String key; private long expire; } 如果这里添加了注解那么在自动配置类的时候就不用添加 @enableConfigurationProperties(TokenProperty.class)注解 prefix 配置文件中的前缀 enable=true 如果自动配置没有读入成功,那么为默认值 对应配置文件 interceptor.token.enable=true interceptor.token.expire=3600 interceptor.token.key=dG9rZW4xMjM0NTY
一、SpringBoot的自动配置原理 不知道大家第一次搭SpringBoot环境的时候,有没有觉得非常简单。无须各种的配置文件,无须各种繁杂的pom坐标,一个main方法,就能run起来了。 所以今天来讲讲SpringBoot是如何实现自动配置的~ 1.1三个重要的注解 我们可以发现,在使用main()启动SpringBoot的时候,只有一个注解@SpringBootApplication 简单来说,这个注解可以帮助我们自动载入应用程序所需要的所有默认配置。 网上将这个@AutoConfigurationPackage注解解释成自动配置包,我们也看看@AutoConfigurationPackage里边有什么: ? 自动配置功能
问题引入SpringBoot最核心的一个东西就是自动配置,自动配置的原理是什么?我们知道Spring最开始是通过xml文件配置,来告诉Spring要创建哪些类、哪些Bean。 那么,问题又来了,SpringBoot是怎么做到自动配置的呢?答案是:类JavaSPI机制。JavaSPI机制一个好的语言、框架设计时候一定要考虑好扩展,做好抽象层。 starter知道了自动配置原理,再来看starter就想吃饭喝水一样简单了。 还有一些更符合Spring模式的,例如,会单独有一个autoconfigure项目来管理自动配置。 自动配置的类配置在META-INF\spring\org.springframework.boot.autoconfigure.AutoConfiguration.imports文件。
Spring Boot的自动配置原理基于以下几个关键点:条件注解 :Spring Boot使用条件注解来决定是否自动配置某个组件或功能。 自动配置类 :自动配置类通常使用@Configuration注解标记,并包含带有@Conditional注解的方法,用于根据条件判断是否应用自动配置。 等注解,用于启动自动配置和组件扫描。 自动配置的启动依赖 :在项目的pom.xml中引入spring-boot-starter-parent作为父依赖,可以确保一些必要的类和资源被包含在项目中,从而满足自动配置的条件。 自动配置的优先级 :如果项目中手动配置了某个Bean,Spring Boot将优先使用手动配置的Bean,而不是自动配置生成的Bean。
前言 springboot有着开箱即用的特性,mybatis等组件只需要用maven安装好,springboot就会自动组装,不需要自己写配置文件。 这便是springboot能自动配置的原因。 自动配置文件 1.1 什么是自动配置文件 在上文,我列举了好几个自动配置文件,当你需要开发的包被springboot自动配置时,就要填写上面的一个或更多配置文件。 你可能会疑惑,这些自动文件分别有什么作用?怎么编写自己的自动配置文件呢? 1.2 自动配置文件的作用和编写 Appendix B. 前者一般会随IDE自动生成,在build期间,IDE会检查你的配置代码和注释,并生成。后者人为书写的,用来对前者进行补充。
注:本文基于:https://blog.51cto.com/14227204/2474670 一、自动发现: 1、部署安装agent端: [root@agent /]# mkdir /zabbix [ OK ] Starting zabbix_agentd (via systemctl): [ OK ] 2、登录到zabbix web界面操作 创建自动发现规则 创建自动发现动作 ? ? ? ? ? ? 二、自动注册 自动注册比自动发现配置少、方便,自动注册是客户端向服务端发送数据 #需要在原有配置文件上更改如下 [root@agent /]# sed -i 's/# HostMetadataItem=
Spring MVC auto-configuration Spring Boot 自动配置好了SpringMVC 以下是SpringBoot对SpringMVC的默认配置:==(WebMvcAutoConfiguration 自动配置了ViewResolver(视图解析器:根据方法的返回值得到视图对象(View),视图对象决定如何渲染(转发?重定向?)) (@Configuration),是WebMvcConfigurerAdapter类型;不能标注@EnableWebMvc==; 既保留了所有的自动配置,也能用我们扩展的配置; //使用WebMvcConfigurerAdapter 2)、在做其他自动配置时会导入;@Import(**EnableWebMvcConfiguration**.class) @Configuration public static class ; 效果:SpringMVC的自动配置和我们的扩展配置都会起作用;
ActuatorApplication.class, args); } } @SpringBootApplication 其实包含3个注解 ○@SpringBootConfiguration:标记当前类为配置类 ○@EnableAutoConfiguration:开启自动配置 ○@ComponentScan:扫描主类所在的同级包以及下级包里的Bean 关键是@EnableAutoConfiguration default {}; String[] excludeName() default {}; } 关键是@Import(AutoConfigurationImportSelector.class)导入的配置功能 , AutoConfigurationImportSelector中的方法getCandidateConfigurations,得到待配置的class的类名集合 /** * Return the auto-configuration
springboot自动配置原理自动配置:pom.xml 代码解读复制代码spring-boot-dependencies 核心依赖在父工程中 我们在写或者引入一些springboot依赖时,不需要指定版本 这个文件里放的全是自动配置类的名称,主程序启动时就通过注解将这些自动类配置类全部加载,有了这些配置类,就省去我们写配置文件 java 代码解读复制代码为什么加载了很多自动配置类 一些生效了,一些没生效 ,以springmvc的自动配置类来示例: 下面这个是springmvc的自动配置类 @Configuration 表示这是一个配置类 @ConditionalOnClass 这个判断条件成立才会加载这个配置类 ,springboot的主程序在运行时,通过@EnableAutoConfiguration开启自动配置,首先会去扫描META-INF/spring.factories下所有的自动配置类,有了这些配置类就省去我们写配置文件 ,若配置文件中有的就用配置文件的,没有的就用默认提供的,这就是springboot的自动配置原理。
) @Documented @Configuration public @interface SpringBootConfiguration { } Configuration配置类上标识这个注解,配置类也是容器中的一个组件 二、EnableAutoConfiguration 开启自动配置功能,以前需要配置的东西,springboot帮我们进行自动配置。 ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage //自动配置包 >[] exclude() default {}; String[] excludeName() default {}; } 自动配置包又被表示了@Import({Registrar.class 即将主配置类即(SpringBootApplication标注的类)的所在的包以及所有子包里面的所有组件扫描到spring容器。
当涉及到Spring Boot自动配置的原理时,我们需要深入了解Spring Boot框架是如何通过约定大于配置的方式实现自动配置的。 自动配置允许开发者根据项目的依赖和配置,自动应用一系列合适的配置,从而简化了开发过程。 原理 Spring Boot自动配置的原理基于条件化配置。 框架会根据应用的类路径、依赖关系、配置属性等条件来判断是否需要自动配置特定的功能。以下是自动配置的主要原理: 条件注解: Spring Boot使用条件注解来控制自动配置。 自动配置类: Spring Boot会提供一系列自动配置类,这些类使用条件注解来决定是否应用某项配置。当特定条件满足时,自动配置类会注册相应的Bean到Spring应用上下文中。 5.将读取数组内容与项目引入依赖进行比较存在一致包会自动配置该技术 总结 Spring Boot自动配置通过条件化配置和自动加载机制,极大地简化了Java应用的开发流程。
1、根据条件来装配bean,SpringBoot的自动配置,根据条件进行自动配置。 基于条件的自动装配,一般配合Condition接口一起使用,只有接口的实现类返回true,才装配,否则不装配。它可以用在方法上面,则直怼方法起作用,还可以用在类上面,则对该类下面的所有方法起作用。 createGBKEncodingConvert() { 34 return new GBKEncodingConvert(); 35 } 36 37 } 然后可以写一个主类,不自动装配看看效果如何 context.close(); 31 } 32 33 34 35 36 } 下面将实现Condition接口的实现类,来实现SpringBoot的自动装配 SpringBoot的自动装配的类可以查看源码,位置如下所示: ? 待续......
文章目录 前言 原理 @EnableAutoConfiguration 解析Import 执行导入类处理器 SpringBootCondition 判定 总结 前言 我以自动配置为SpringBoot的第一篇章 ,是因为从SpringMvc到SpringBoot,它实现了零配置,并出现了很多默认配置,在进行后面的源码理解时可能会有部分地方不理解,念头不通达,所以先将自动配置这部分给了解清楚,知道它的一个配置是怎么加载的 SpringBoot的自动配置由注解@EnableAutoConfiguration开启,所以我们从这个注解入手,看看它是怎么实现的自动配置,和条件过滤的。 读取到应用实现类,而spring也是一样的,它是通过读取META-INFO/spring.factories这个文件来加载配置的 然后我们在来看SpringBoot的自动配置,Spring是会引入下面的一个自动配置依赖 ,它里面有很多自动配置类,基本上所有的spring-boot的自动配置都在这里,仔细看的话,你会看到aop、jpa、MongoDB、kafka、servlet等等。