spring常用注解(三)@ConditionalOnProperty

2024-05-01 16:52

本文主要是介绍spring常用注解(三)@ConditionalOnProperty,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、介绍

ConditionalOnProperty
ConditionalOnResource
ConditionalOnBean
ConditionalOnClass
ConditionalOnMissingBean
ConditionalOnMissingClass
其中@ConditionalOnProperty是最为常见的一种,尤其用在自动配置类中。源码:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {//name的别名,和value不可同时使用String[] value() default {};/**配置项的前缀,例如完整的配置是config.person.enable=true* 那 prefix=“config.person”*/String prefix() default "";/**配置项的属性,例如完整的配置是config.person.enable=true在前面已经设置 prefix=“config.person”那么 name=“enable”;如果prefix没有设置,那么name可以是整个配置项,例如下面:name=“config.person.enable”,效果和上面的一样*/String[] name() default {};/*** 会将配置文件中的值和havingValue的值对比,如果一样则加载Bean,例如:* * config.person.enable=true,havingValue=“true”,加载Bean* * config.person.enable=false,havingValue=“false”,加载Bean* * config.person.enable=ok,havingValue=“ok”,加载Bean* * config.person.enable=false,havingValue=“true”,不加载Bean* * config.person.enable=ok,havingValue=“no”,不加载Bean* * 当然havingValue也可以不设置,只要配置项的值不是false或“false”,都加载Bean,例如:* * config.person.enable=ok,不设置havingValue,加载Bean* * config.person.enable=false,不设置havingValue,不加载Bean*/String havingValue() default "";/*** 如果在配置文件中没有该配置项,是否加载Bean*/boolean matchIfMissing() default false;}

二、demo

1、

import lombok.Builder;
import lombok.Data;@Data
@Builder
public class MenuDTO {private String name;private String url;
}
import lombok.extern.slf4j.Slf4j;
import org.demo.annotation.dto.MenuDTO;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@Slf4j
public class MyBeanConfig {@Beanpublic MenuDTO menuDTO(){log.info("===MenuDTO init start===");return MenuDTO.builder().name("初始化name").url("初始化url").build();}
}

启动时会自动注入Bean:

2、现在加入开关

import lombok.extern.slf4j.Slf4j;
import org.demo.annotation.dto.MenuDTO;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@Slf4j
public class MyBeanConfig {@Bean@ConditionalOnProperty(name = "config.switch",matchIfMissing = true)public MenuDTO menuDTO(){log.info("===MenuDTO init start===");return MenuDTO.builder().name("初始化name").url("初始化url").build();}
}

(1)设置为true

config.switch = true

  启动项目后台打印同上。

(2)不设置

server.port=3333
server.servlet.context-path=/annotationDemo#config.switch = false

 启动项目后台打印同上,因为设置了matchIfMissing = true

(3)config.switch 改为false,则启动项目不打印,说明bean未执行初始化

这篇关于spring常用注解(三)@ConditionalOnProperty的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/952191

相关文章

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

Java实例化对象的​7种方式详解

《Java实例化对象的​7种方式详解》在Java中,实例化对象的方式有多种,具体取决于场景需求和设计模式,本文整理了7种常用的方法,文中的示例代码讲解详细,有需要的可以了解下... 目录1. ​new 关键字(直接构造)​2. ​反射(Reflection)​​3. ​克隆(Clone)​​4. ​反序列化

Java 压缩包解压实现代码

《Java压缩包解压实现代码》Java标准库(JavaSE)提供了对ZIP格式的原生支持,通过java.util.zip包中的类来实现压缩和解压功能,本文将重点介绍如何使用Java来解压ZIP或RA... 目录一、解压压缩包1.zip解压代码实现:2.rar解压代码实现:3.调用解压方法:二、注意事项三、总

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密