详细分析Spring Framework中 @ConditionalOnProperty的基本知识(附Demo)

目录

  • 前言
  • 1. 基本知识
  • 2. Demo

前言

基本的Java知识推荐阅读:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. 【Java项目】实战CRUD的功能整理(持续更新)

从实战中学习启发

在这里插入图片描述

1. 基本知识

@ConditionalOnProperty 是 Spring Framework 中的一个注解,用于根据特定的属性值条件性地加载 Spring 组件

通常用于配置类或组件中,以便在满足特定条件时激活某个 Bean

基本的概念如下:

  • 用途:@ConditionalOnProperty 用于条件性地创建和配置 Spring Bean,当某个特定的配置属性存在并且符合特定值时,才会创建该 Bean
  • 属性:
    name:需要检查的属性名,可以是一个或多个属性名
    havingValue:属性的值,只有当属性值与此相等时,条件才会成立。默认值为空字符串
    matchIfMissing:当指定的属性不存在时,是否匹配。默认值为 false,表示如果属性缺失,则条件不成立

基本的作用 有如下:

  • 灵活配置:可以通过外部配置(如 application.properties 或 application.yml)来控制 Bean 的加载,支持不同环境下的配置
  • 减少启动时间:只在需要时加载特定的 Bean,从而减少应用程序的启动时间和内存占用
  • 增强模块化:通过条件性加载,可以实现功能模块的分离和组合,使得应用更具可扩展性

2. Demo

整体架构分别如下:

在这里插入图片描述

对应的代码如下:

// DemoApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}// MyService.java
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;@Service
@ConditionalOnProperty(name = "app.feature.enabled", havingValue = "true", matchIfMissing = false)
public class MyService {public void execute() {System.out.println("MyService is active!");}
}// MyAppRunner.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Component
public class MyAppRunner implements CommandLineRunner {@Autowired(required = false) // 使得该注入为可选private MyService myService;@Overridepublic void run(String... args) {if (myService != null) {myService.execute();} else {System.out.println("MyService is not active!");}}
}

在 src/main/resources/application.properties 中添加以下配置:

# 启用特性
app.feature.enabled=true

如果将 app.feature.enabled 的值设置为 false 或不设置该属性,则 MyService 不会被激活,控制台将输出 MyService is not active!

在这里插入图片描述

设置之后,将会被激活

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

20分钟写一个链表

目录 前言1.带头结点的循环双链表1.1 链表的分类、线性表的对比1.2 双链表基本操作代码实现1.2.1 初始化1.2.2 销毁、打印链表 总结 前言 有一个学长在面试的时候被问到这样一个问题,“你可以用20分钟写一个链表吗?”学长第一反应是,至少要一…

BFS解决多源最短路问题_01矩阵_C++【含多源最短路问题介绍+dist数组介绍】

BFS解决多源最短路问题_01矩阵_C 0. 多源最短路问题介绍1. 题目解析算法分析2. 代码实现 0. 多源最短路问题介绍 如图,红色是出发点,蓝色是终点。以前我们做的题中,出发点只有一个,所谓多源的意思就是,出发点有多个&am…

KubeSphere中集成ApiSix

一、Apache APISIX 介绍 Apache APISIX 是一款开源的高性能、动态云原生网关,由深圳支流科技有限公司于 2019 年捐赠给 Apache 基金会,当前已经成为 Apache 基金会的顶级开源项目,也是 GitHub 上最活跃的网关项目。Apache APISIX 当前已经覆盖…

✨ComfyUI workflow加密工具节点ComfyUI_CryptoCat

✨背景 玩comfyui的朋友都了解,工作流workflow是一种很重要的资产,可以通过workflow把一系列的处理工作组织起来,提升工作效率,甚至分享生成的图片就可以还原整个的工作流,对于分享传播是个好事情,但是对于…

8位单片机与32位单片机

8位单片机与32位单片机 8位与32位指的是什么 单片机的8位或32位说的是什么呢?要搞懂这个问题,首先要搞明白8位或32位说的是单片机上的哪一个部件。 这是单片机的内部框图。单片机内部由这么多部件构成,并不单单是一个CPU,它内部…

微软推出针对个人的 “AI伴侣” Copilot 会根据用户的行为模式、习惯自动进化

微软推出了为每个人提供的“AI伴侣”Copilot,它不仅能够理解用户的需求,还能根据用户的日常习惯和偏好进行适应和进化。帮助处理各种任务和复杂的日常生活场景。 它能够根据用户的生活背景提供帮助和建议,保护用户的隐私和数据安全。Copilot…

【Canvas与色彩】十六等分多彩隔断圆环

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>隔断圆环Draft5十六等分多彩</title><style type"text…

BFS解决FloodFill算法_被围绕的区域_C++

BFS解决FloodFill算法_被围绕的区域_C 1. 题目描述2. 算法分析3. 代码实现 1. 题目描述 leetcode链接&#xff1a;https://leetcode.cn/problems/surrounded-regions/description/ 给你一个m x n的矩阵board&#xff0c;由若干字符X和O组成&#xff0c;捕获 所有 被围绕的区域…

数据结构 ——— 单链表oj题:链表的回文结构

目录 题目要求 手搓简易单链表 代码实现 题目要求 对于一个单链表&#xff0c;设计一个时间复杂度为O(N)&#xff0c;空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构&#xff0c;给定一个链表的头指针 head&#xff0c;返回一个 bool 值&#xff0c;代表其是否为…

矩阵式键盘接口设计(用单片机读取4x4矩阵式键盘的键号,并将其显示在数码管上)(Proteus 与Keil uVision联合仿真)

一、实验原理 1、分析电路中按键状态检测的方法。 矩阵式&#xff08;也称行列式&#xff09;键盘用于按键数目较多的场合&#xff0c;由行线和列线组成&#xff0c;按键位于行、列交叉点上&#xff0c;见图5-26&#xff0c;一个44的行、列结构可以构成一个16个按键的键盘&…

FastAPI框架使用枚举来型来限定参数、FastApi框架隐藏没多大意义的Schemes模型部分内容以及常见的WSGI服务器Gunicorn、uWSGI了解

一、FastAPI框架使用枚举来型来限定参数 FastAPI框架验证时&#xff0c;有时需要通过枚举的方式来限定参数只能为某几个值中的一个&#xff0c;这时就可以使用FastAPI框架的枚举类型Enum了。publish:December 23, 2020 -Wednesday 代码如下&#xff1a; #引入Enum模块 from fa…

一张图片生成数字人的3D发型:技术创新与应用前景

随着人工智能(AI)和计算机图形学的不断进步,从单张肖像图像生成3D数字头发的技术正在变得越来越成熟。这项技术不仅能够处理复杂的编织和未编织发型,还能在虚拟现实、电影制作和美容行业中找到广泛的应用。本文将详细介绍一种创新的3D头发重建技术,探讨其关键特性、技术创…

Dit架构 diffusion范式分类+应用

1.ping 网址 2.ssh nscc/l20 3.crtl,打开vscode的setting 4.win 10修改ssh配置文件及其密钥权限为600 - 晴云孤魂 - 博客园 整体来看&#xff1a; 使用transformer作为其主干网络&#xff0c;代替了原先的UNet 在latent space进行训练&#xff0c;通过transformer处理潜…

搬砖 网盘一键转存源码

网盘一键转存源码&#xff0c;免费资源没测试 网盘一键转存源码&#xff0c;可以将您的百度网盘资源一键转存到。并支持后台设置开屏广告 源码截图&#xff1a; 下载地址&#xff1a; https://yuncv.lanzouw.com/i8dZk2btyl4h

04. maven 三种项目打包方式 pom、jar、war 的区别(记一次 Spring 项目启动报错)

文章目录 1. 记一次 Spring 项目启动报错1.1 现象1.2 分析1.3 过程复现 2. maven 项目三种打包方式的区别 1. 记一次 Spring 项目启动报错 1.1 现象 我在项目下创建了一个子模块&#xff0c;然后又将该子模块移除&#xff0c;之后启动报错&#xff0c;如下&#xff1a; com.…

深入理解 Java 对象的内存布局

对于 Java 虚拟机&#xff0c;都知道其内存区域划分成&#xff1a;堆、方法区、虚拟机栈等区域。但一个对象在 Java 虚拟机中是怎样存储的&#xff0c;相信很少人会比较清楚地了解。Java 对象在 JVM 中的内存布局&#xff0c;是了解并发编程同步机制的基础。 在 HotSpot 虚拟机…

通信工程学习:什么是IOT物联网

IOT&#xff1a;物联网 IOT物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;是一种通过信息传感设备&#xff0c;按约定的协议&#xff0c;将任何物体与网络相连接&#xff0c;以实现智能化识别、定位、跟踪、监管等功能的技术体系。以下是对IOT物联网的详…

Windows 通过 Docker 安装 GitLab

1. 安装 Docker Desktop 下载网站&#xff1a;Windows | Docker Docs 2. 拉取 GitLab Docker 镜像 打开 PowerShell 或 命令提示符&#xff0c;拉取 GitLab 镜像&#xff1a; docker pull gitlab/gitlab-ee:latest或则使用社区版&#xff1a; docker pull gitlab/gitlab-ce…

电脑无法无线投屏的解决办法

在前司的时候经常遇到电脑无法使用无线投屏器的情况&#xff0c;今天就来聊聊如何解决。 1.不会连接。这种情况&#xff0c;经常发生在WIN10升级WIN11之后&#xff0c;一般是两种办法&#xff0c;一种是同时按键盘上的WINDOWS和K键&#xff0c;右下角就会出来连接的图标&#…

showdoc二次开发

showdoc用的vue版本老&#xff0c;需要安装老版本nodejs&#xff0c;比如node 14.21.3 win32-x64-93_binding.node问题 https://github.com/sass/node-sass/releases 下载 web_src\node_modules\node-sass\vendor\win32-x64-93 下面重命名为binding.node 代理到php后端&…