CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

「Springboot」自动配置的理论基础-永久免费的源码丞旭猿

本文转载自【微信公众号:程序JAVA圈】经微信公众号授权转载,如需转载与原文作者联系。

本文结论

  • SpringBoot的自动配置就是SpringBoot在源码中预先写好了一些配置类,预先定义好了一些Bean!

  • 在使用SpringBoot时,这些配置类就已经在我们项目的依赖中了!

  • 自动配置类或自动配置Bean是否生效,看具体所指定的条件!

在spring中有哪些配置

  • 配置文件:类似端口号、数据库地址、用户名密码等

  • 各种Bean:比如整合Mybatis需要配置的MapperFactoryBean,比如整合事务需要配置DataSourceTransactionManager…

自动配置做什么事情

  • 核心是配置各种Bean。

  • 对于配置文件来说,spring并不知道你的地址、密码、账号…这些值,所以spring不能进行自动配置。

  • 对于服务端口号、中间件端口号…这些配置,spring boot中也会提供默认值。

spring boot中自动配置做了什么?

  • Spring整合各种Servlet容器(Tomcat、Jetty)的Bean。

  • Spring整合各种消息队列(RabbitMQ、Kafka、RocketMQ)的Bean。

  • Spring整合各种数据库(MySQL、oracle)的Bean。

  • Spring整合各种缓存(redis)的Bean。

  • 等等

一些自动配置类

  • ServletWebServerFactoryAutoConfiguration:配置了Servlet Web场景中所需要的一些Bean。

  • TransactionAutoConfiguration:配置了事务场景中所需要的一些Bean。

  • AopAutoConfiguration:配置了AOP场景中所需要的一些Bean。

  • RabbitAutoConfiguration:配置了Rabbitmq场景中所需要的一些Bean。

自动配置类的生效控制方式:条件注解

  • ConditionalOnBean:是否存在某个某类或某个名字的Bean。

  • ConditionalOnMissingBean:是否缺失某个某类或某个名字的Bean。

  • ConditionalOnSingleCandidate:是否符合指定类型的Bean只有一个。

  • ConditionalOnClass:是否存在某个类。

  • ConditionalOnMissingClass:是否缺失某个类。

  • ConditionalOnExpression:指定的表达式返回的是true还是false。

  • ConditionalOnJava:判断Java版本。

  • ConditionalOnJndi:JNDI指定的资源是否存在。

  • ConditionalOnWebApplication:当前应用是一个Web应用。

  • ConditionalOnNotWebApplication:当前应用不是一个Web应用。

  • ConditionalOnProperty:Environment中是否存在某个属性。

  • ConditionalOnResource:指定的资源是否存在。

  • ConditionalOnWarDeployment:当前项目是不是以War包部署的方式运行。

  • ConditionalOnCloudPlatform:是不是在某个云平台上。

  • Conditional:上面这些注解上都有这个@Conditional注解!

条件注解的作用域

  • 条件注解是可以写在类上和方法上。

  • 个条件注解写在了自动配置类上,那该自动配置类会不会生效就要看当前条件能不能符合。

  • 条件注解写在某个@Bean修饰的方法上,那这个Bean生不生效就看当前条件符不符合。

条件注解的实现原理

  • Spring在解析某个自动配置类时,会先检查该自动配置类上是否有条件注解,如果有,则进一步判断该条件注解所指定的条件当前能不能满足,如果满足了则继续解析该配置类,如果不满足则不进行解析了,也就是配置类所定义的Bean都得不到解析,也就是相当于没有这些Bean了。

  • 同理,Spring在解析某个@Bean的方法时,也会先判断方法上是否有条件注解,然后进行解析,如果不满足条件,则该Bean不会生效。

  • 处理条件注解的源码位置在:org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isCandidateComponent(MetadataReader)中的调用isConditionMatch(metadataReader);方法内部。

举报/反馈

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容