首页 > 其他分享 >springboot 初始化加载过程 条件注解

springboot 初始化加载过程 条件注解

时间:2023-08-02 20:36:01浏览次数:48  
标签:初始化 springboot spring 生效 条件 注解 加载

官网解释:https://docs.spring.io/spring-boot/docs/3.0.9/reference/html/features.html#features.developing-auto-configuration.condition-annotations

从其他博客粘过来的表格:

条件注解Condition处理类实例解释
@ConditionalOnBean OnBeanCondition @ConditionalOnBean(DataSource.class) Spring容器中不存在对应的实例生效
@ConditionalOnMissingBean OnBeanCondition @ConditionalOnMissingBean(name = "redisTemplate") Spring容器中不存在对应的实例生效
@ConditionalOnSingleCandidate OnBeanCondition @ConditionalOnSingleCandidate(FilteringNotifier.class)

Spring容器中是否存在且只存在一个对应的实例,

  或者虽然有多个但 是指定首选的Bean生效

@ConditionalOnClass OnClassCondition @ConditionalOnClass(RedisOperations.class) 类加载器中存在对应的类生效
@ConditionalOnMissingClass OnClassCondition @ConditionalOnMissingClass(RedisOperations.class) 类加载器中不存在对应的类生效
@ConditionalOnExpression OnExpressionCondition @ConditionalOnExpression(“’${server.host}’==’localhost’”) 判断SpEL 表达式成立生效
@ConditionalOnJava OnJavaCondition @ConditionalOnJava(JavaVersion.EIGHT) 指定Java版本符合要求生效
@ConditionalOnProperty OnPropertyCondition

@ConditionalOnProperty(prefix = “spring.aop”, name = “auto”,

        havingValue = “true”, matchIfMissing = true)

应用环境中的属性满足条件生效
@ConditionalOnResource OnResourceCondition @ConditionalOnResource(resources=”mybatis.xml”) 存在指定的资源文件生效
@ConditionalOnWebApplication OnWebApplicationCondition   当前应用是Web应用生效
@ConditionalOnNotWebApplication OnWebApplicationCondition   当前应用不是Web应用生效

       上面的扩展注解我们可以简单的分为以下几类:

  • Bean作为条件:@ConditionalOnBean、@ConditionalOnMissingBean、@ConditionalOnSingleCandidate。
  • 类作为条件:@ConditionalOnClass、@ConditionalOnMissingClass。
  • SpEL表达式作为条件:@ConditionalOnExpression。
  • JAVA版本作为条件: @ConditionalOnJava
  • 配置属性作为条件:@ConditionalOnProperty。
  • 资源文件作为条件:@ConditionalOnResource。
  • 是否Web应用作为判断条件:@ConditionalOnWebApplication、@ConditionalOnNotWebApplication。

以上是理解springboot默认加载的基础。

1.

 2.

 3.

 4.

 5.

 6.

 7.截图放不下了,最终会指向 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

 8. imports 局部截图。这里包含了springboot想为你加载的所有模块的 *AutoConfiguration

 9.当然,这些自动配置类并不是全部都会用到,会经过筛选处理

 10.现在我们看一下 WebMvcAutoConfiguration.. 如果满足这三个条件。就不会过滤掉,看看上面的筛选条件。

 11.看看WebMvcAutoConfiguration 做了什么。 根据条件注解,看看加载 Bean的条件,。思考如何定义自己的 bean并替换它们吧!

 

 

 

标签:初始化,springboot,spring,生效,条件,注解,加载
From: https://www.cnblogs.com/ruber/p/17601665.html

相关文章

  • Springboot+elasticsearch基础整合实例
    es,当插入数据的时候,可以自动创建索引,但是mapping却都是默认类型,导致搜索时需要key.keyword方式,不科学。索引也可以手偶刚创建,指定mapping。当然还有一种优雅的方案使用template,当自动创建索引的时候,我们的字段类型就可控了。真实业务中,不能用一个固定的index,索引是需要切分的......
  • JAVA-Springboot实践项目-用户注册
    Smiling&Weeping----我本没喜欢的人,见你的次数多了,也就有了。1.创建数据表1.1.选中数据表:usestore1.2.创建t_user表:2创建用户实......
  • Java编程-目录整理、新建接口、集成mybatis plus以及数据库初始化
    数据库初始化新建对应调试库```#dockerps#dockerexec-it6d542566d077/bin/bashpostgres=#createdatabasenovel;```执行全量脚本......
  • PHP客服系统聊天页面-thinkphp加载页面源码解释
    PHPworkerman客服系统加载聊天页面的代码逻辑流程,可以进行参考。如果想要二开修改的,可以根据这个流程来修改。thinkphp的router部分Route::get('kefu/:u/:f?','index/index/chat');查看控制器加载页面逻辑application/index/controller/Index.phppublicfunctionchat函......
  • 关于final修饰字段的初始化问题
    一、final修饰【实例变量】1.类下没有【无参的构造方法】时1.定义时显式赋值2.构造方法中赋值(每个构造方法都需要赋值)3.普通初始化块中赋值(静态初始化块不可以)2.类下有【无参的构造方法】时1.定义时显式赋值2.普通初始化块中赋值(静态初始化块不可以)二、final修饰......
  • SpringBoot-2、SpringBoot打包时排除指定文件
    maven-jar-plugin,它可以配置JAR打包的细节,包括哪些文件会被包含在JAR中。以下是一个示例的配置,可以在pom.xml中添加:<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin<......
  • springboot和springcloud区别
    springboot和springcloud区别有:1、含义不同;2、作用不同;3、使用方式不同;4、特征不同;5、注释不同;6、优势不同;7、组件不同;8、设计目的不同。其中,含义不同指的是springboot是一个快速开发框架,而SpringCloud是建立在SpringBoot上的服务框架。1、含义不同springboot:一个快速开发框架......
  • SpringBoot 打jar包后下载static文件夹下的文件
    前端:后端:@RequestMapping(value={"downloadFile"})publicvoiddownloadFile(HttpServletResponseresponse){InputStreaminputStream=null;OutputStreamoutputStream=null;fileName="aaa.pdf";try{//直接获取流inputStream=FileUtil.cl......
  • SpringBoot + Redis 执行lua脚本
    1、背景有时候,我们需要一次性操作多个Redis命令,但是这样的多个操作不具备原子性,而且Redis的事务也不够强大,不支持事务的回滚,还无法实现命令之间的逻辑关系计算。所以,一般在开发中,我们会利用lua脚本来实现Redis的事务。2、lua脚本Redis中使用lua脚本,我们需要注意......
  • 使用Maven插件为SpringBoot应用构建Docker镜像
    Docker开启远程API用vim编辑器修改docker.service文件#生成证书opensslgenrsa-aes256-outca-key.pem4096opensslreq-new-x509-days365-keyca-key.pem-sha256-outca.pemopensslgenrsa-outserver-key.pem4096opensslreq-subj"/CN=localhost"-sha256-......