首页 > 其他分享 >SpringBoot 2x 系列之(四)自动配置

SpringBoot 2x 系列之(四)自动配置

时间:2024-02-28 10:23:57浏览次数:39  
标签:系列 SpringBoot spring 配置 2x 自动 boot 组件

自动配置

1. 引导加载自动配置类

Spring Boot 1.md 一、SpringBoot 入门 4.2 主程序类,主入口类【自动配置原理】

1.1 @SpringBootConfiguration

Spring Boot 1.md 一、SpringBoot 入门 4.2 主程序类,主入口类【自动配置原理】

1.2 @EnableAutoConfiguration

1.2.1 @AutoConfigurationPackage

指定了默认的包规则

1.2.1.1 @Import(AutoConfigurationPackages.Registrar.class)

Spring Boot 1.md 一、SpringBoot 入门 4.2 主程序类,主入口类【自动配置原理】

利用Registrar给容器中批量注册组件,注册的是主配置类(@SpringBootConfiguration标注的类)的所在包及下面所有子包里面的所有组件

1.2.2 @Import(AutoConfigurationImportSelector.class)

利用Selector给容器中批量注册组件【按需注册】,注册的是spring-boot-autoconfigure-2.3.4.RELEASE.jar包里的META-INF/spring.factories文件org.springframework.boot.autoconfigure.EnableAutoConfiguration项的值

META-INF/spring.factories文件里面写死了spring-boot一启动就要给容器中加载的所有配置类

1.3 @ComponentScan

指定要扫描的包

2. 按需开启自动配置项

虽然我们127个场景的所有自动配置启动的时候默认全部加载
按照条件装配规则(@Conditional),最终会按需配置【导了相应的包,才会有需要的类,有了对应的类,相应的自动配置才会生效】

@ConditionalOnWebApplication(type = Type. SERVLET):当前应用是否为Servlet原生类型【与之对应的还有响应式类型的,SpringBoot2支持两种Web模式开发】的Web应用

@AutoConfigureOrder( Ordered. HIGHEST_ PRECEDENCE):指定优先级,先生效还是后生效

@AutoConfigureAfter( ServletWebServerFactoryAutoConfiguration.class ):在ServletWebServerFactoryAutoConfiguration配置完之后再配置当前类

@ConditionalOnClass( ServletRegistration. class):系统中有没有这个ServletRegistration类型的组件

    //给容器中加入了文件上传解析器;
    @Bean
	@ConditionalOnBean(MultipartResolver.class)  //容器中有这个类型组件
	@ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字 multipartResolver 的组件
	public MultipartResolver multipartResolver(MultipartResolver resolver) {
        //给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。
        //SpringMVC multipartResolver。防止有些用户配置的文件上传解析器不符合规范
		// Detect if the user has created a MultipartResolver but named it incorrectly
		return resolver;
	}

3. 定制化配置

总结:

  • SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration

  • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定

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

  • 只要容器中有这些组件,相当于这些功能就有了

  • 定制化配置

    • 用户直接自己@Bean替换底层的组件
    • 用户去看这个组件是获取的配置文件什么配置项就去修改。

xxxxxAutoConfiguration ---> 组件 ---> xxxxProperties里面拿值 ----> application.properties

4. 最佳实践【SpringBoot应用如何编写】

标签:系列,SpringBoot,spring,配置,2x,自动,boot,组件
From: https://www.cnblogs.com/wzzzj/p/18039182

相关文章

  • SpringBoot 2x 系列之(三)容器功能
    容器功能1.组件添加1.1@Configuration结合@Bean注册组件@Configuration见[email protected]@Component、@Controller、@Service、@Repository见Spring.md相关内容1.3@ComponentScan见[email protected]@Import见Spring.md8.......
  • SpringBoot 2x 系列之(二)SpringBoot特点
    SpringBoot特点1.依赖管理特性SpringBoot已经为我们做了版本仲裁,那么如果我们要修改已经做了版本仲裁的依赖,比如mysql驱动的依赖,该怎么做呢?查看spring-boot-dependencies里面规定的当前依赖版本用的properties属性在当前项目里面重新配置<properties><mysql.versi......
  • SpringBoot 2x 系列之(一)基础入门
    基础入门课程规划1.时代背景响应式编程解决的问题:如何使用少量资源编写一个极高吞吐量、能承担大并发的应用响应式应用:占用少量的资源(线程)处理大量的并发springboot:整合spring整个生态圈的一站式框架​ 高层框架,底层是SpringFrameworkSpring:1)从微观角度说Spring指Spri......
  • SpringBoot 1x 系列之(十一)Spring Boot与任务
    SpringBoot与任务异步任务、定时任务、邮件任务1.异步任务1.1应用场景执行一些操作(如:邮件任务等)不想阻塞当前线程的情况下,可以通过多线程的方式进行异步处理。1.2快速使用主配置类//开启@Async异步注解功能@EnableAsync@EnableRabbit@EnableCaching@MapperScan("co......
  • SpringBoot 1x 系列之(十)Spring Boot与检索
    SpringBoot与检索ElasticSearch1.ElasticSearch简介1)Java语言编写的开源全文搜索引擎。2)用于快速的存储、搜索和分析海量数据。3)是一个分布式搜索服务。4)提供RestfulAPI,通过发送请求的方式就可以将ElasticSearch用起来。5)底层基于Lucene(开源的搜索引擎软件工具包)2.Doc......
  • SpringBoot 1x 系列之(九)Spring Boot与消息
    SpringBoot与消息JMS、AMQP、RabbitMQ1.概述消息服务的两个常见规范(消息代理规范):JMS、AMQPJMS(JavaMessageService)JAVA消息服务:​ 基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现AMQP(AdvancedMessageQueuingProtocol)高级消息队列协议​ 也是一个消息代理的规范......
  • SpringBoot 1x 系列之(八)Spring Boot与缓存
    SpringBoot与缓存JSR-107、Spring缓存抽象、整合Redis缓存:加速系统访问,提升系统性能热点数据、临时数据(如验证码)1.JSR-1071.1背景统一缓存的开发规范及提升系统的扩展性,J2EE发布了JSR-107缓存规范1.2JSR107简介CacheManager与Cache的关系,类比连接池与连接涉及的包ja......
  • SpringBoot 1x 系列之(七)自定义starter
    自定义starterstarters原理、自定义starters如何自定义starter:​ 1、这个场景需要使用到的依赖是什么?​ 2、如何编写自动配置@Configuration//指定这个类是一个配置类@ConditionalOnXXX//在指定条件成立的情况下自动配置类生效@AutoConfigureAfter//指定自动配置类的......
  • SpringBoot 1x 系列之(六)Spring Boot启动配置原理
    SpringBoot启动配置原理启动原理、运行流程、自动配置原理几个重要的事件回调机制(这几个事件回调机制可供我们进行干预)配置在META-INF/spring.factoriesApplicationContextInitializerSpringApplicationRunListener只需要放在ioc容器中(@Component标注)ApplicationRunnerCo......
  • SpringBoot 1x 系列之(五)SpringBoot与数据访问
    SpringBoot与数据访问JDBC、MyBatis、SpringDataJPASpringBoot底层是使用的SpringData作为数据访问的默认处理方式。1.整合基本JDBC与数据源Pom依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><......