FeatureToggle

2023-11-09

概述

为了控制功能开启与关闭,减少代码中的if-else繁琐的逻辑判断。主要通过spring的aop及java的注解实现。目前主要包含6个部分的代码,支持内存存储和部分策略。

源码git:稍后放源码

功能

  1. 单个开关的配置

  2. 开关组的配置,通过组的设置,可控制组内的开关的开启和关闭

  3. 开关使用策略(v1.0 支持工作日策略,可灵活配置其他时间;支持客户端和服务端策略)

  4. 支持方法内调用的public方法

使用场景

接口层面的方法

同一个接口,有两个实现类,每个类的实现类中方法实现不一样,可以通过开关控制系统使用哪个实现类实现的方法。

如接口A-Service,有add()的方法,两个实现类A-ServiceImpl-1和A-ServiceImpl-2分别实现的add()方法,可以增加feature("add",true/false)一个开关控制add()方法是使用A-ServiceImpl-1还是A-ServiceImpl-2的实现。当然会有一个默认的使用方法,假设默认使用A-ServiceImpl-1,当feature的状态设置为true会使用A-ServiceImpl-2,否则使用A-ServiceImpl-1。

非接口层面的方法(内部方法调用public方法)

在一个方法中需要使用其他非接口的方法,正常情况下会实现两个方法,通过if-else去选择,现在可以通过开关的控制自动选择一个方法。

如compose()方法,里面需要调用非接口方法add()1和add2()其中之一,可以在这两个方法中加上注解,然后配置两个feature("add1",true/false)和feature("add2",true/false)开关,并根据实际配置的开关,compose()方法中具体使用哪一个,如果都设置为true,结果会使用后面的方法,如果都是false,则两个方法都不使用。

实现

代码分为6个部分

feature核心类

  1. aop切面类

    • 包括接口级别的方法和非接口级别的方法(方法内调用的public方法)

  2. store存储类

  3. strategy策略类

  4. exception异常类

  5. util工具类

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FeatureToggle 的相关文章

  • Android - 如何访问 onResume 中 onCreate 中实例化的 View 对象?

    In my onCreate 方法 我正在实例化一个ImageButton View public void onCreate Bundle savedInstanceState super onCreate savedInstanceSt
  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • 无法加载 jar 文件的主类

    我使用 Eclipse IDE 开发了一个应用程序 创建应用程序后 我以 jar 格式导出项目 当我尝试运行此 jar 文件时 出现错误 无法加载主类 请帮忙 当您将项目导出为 jar 时 请参阅此所以问题 https stackoverf
  • 如何解决 onEditCommit 事件上的类型不匹配错误?

    我在 Fxml 中使用 onEditCommit 事件在用户编辑数据后检索数据 FXML 代码
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • Java:VM 如何在 32 位处理器上处理 64 位“long”

    JVM 如何在 32 位处理器上处理 64 位的原始 long 在多核 32 位机器上可以并行利用多个核心吗 64 位操作在 32 位机器上慢了多少 它可能使用多个核心来运行不同的线程 但不会并行使用它们进行 64 位计算 64 位长基本上
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • jmap - 组织和堆操作会给 jvm 带来开销吗?

    正如标题所述 需要多少开销jmap histo and jmap heap分别带到jvm 如果一个内存敏感的 Java 进程处于OutOfMemory 例如 大约 96 的堆已满 并且无法通过 full gc 清除 其中一项操作是否有可能将
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • 将 RSA 密钥从 BigIntegers 转换为SubjectPublicKeyInfo 形式

    WARNING 最初的问题是关于 PKCS 1 编码密钥 而问题中的实际示例需要SubjectPublicKeyInfo X 509 编码密钥 我目前正致力于在 java 中从头开始实现 RSA 算法 特别是密钥生成方面 现在我的代码可以给
  • 如何移动图像(动画)?

    我正在尝试在 x 轴上移动船 还没有键盘 我如何将运动 动画与boat png而不是任何其他图像 public class Mama extends Applet implements Runnable int width height i
  • Path2D 上的鼠标指针检测

    我构建了一个Path2D http docs oracle com javase 7 docs api java awt geom Path2D html表示由直线组成的未闭合形状 我希望能够检测何时单击鼠标并且鼠标指针靠近路径 在几个像素
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu
  • 使用 eclipse IDE 配置 angularjs

    我想开始使用 AngularJs 和 Java Spring 进行开发 我使用 Eclipse 作为 IDE 我想配置我的 Eclipse 以使这些框架无缝工作 我知道我可能要求太多 但相信我 我已经做了很多研究 你们是我最后的选择 任何帮

随机推荐

  • 埃加洛尔虚拟服务器,致我终将逝去的二区:新一轮大服务器实装

    已实装wow大服务器配对列表 8月13日已完成 第一大区 鹰巢山 第十大区 达尔坎 第一大区 玛多兰 第一大区 银月 第二大区 黑暗之门 第十大区 血吼 第二大区 埃苏雷格 第一大区 凯尔萨斯 8月6日已完成 第二大区 格鲁尔 第一大区 斯
  • anaconda创建环境失败解决方案

    在深度学习中 我们常采用anaconda进行环境管理 这次出现了一个问题 当在 base 环境下输入命令 conda create n env name python x x 来创建一个环境名称为env name python版本为x x的
  • 如何通过OpenFace实现人脸识别框架

    本文中 笔者将介绍OpenFace中实现人脸识别的pipeline 这个pipeline可以看做是使用深度卷积网络处理人脸问题的一个基本框架 很有学习价值 它的结构如下图所示 Input Image gt Detect 输入 原始的可能含有
  • 物联网毕设分享 - stm32单片机的远程WIFI密码锁 - 物联网 嵌入式

    文章目录 0 前言 1 简介 主要器件 实现效果 4 硬件设计 WIFI模块 OLED显示屏 相关原理图 硬件接线 5 软件说明 开发环境介绍 程序下载配置 设备初始化打印的信息 6 部分核心代码 7 最后 0 前言 这两年开始毕业设计和毕
  • 合理配置线程池核心线程数(IO密集型和CPU密集型)

    1 代码查看服务器的核心数 要合理配置线程数首先要知道公司服务器是几核的 代码查看服务器核数 System out println Runtime getRuntime availableProcessors 2 合理线程数配置之CPU密集
  • 使用Python实现单隐藏层神经网络的训练

    文章目录 1 实验内容 2 实验要求 3 实验原理 多层感知机 前向传播与后向传播 4 具体实现 数据加载与可视化 激活函数 单隐层神经网络 前向传播 后向传播 Mini batch梯度下降 预测与评估 分类结果可视化 5 实验结果 不同激
  • 表情符号(emoji)大全,只此一文便够了

    本文由 大侠 AhcaoZhu 原创 转载请声明 链接 https blog csdn net Ahcao2008 表情符号 emoji 大全 只此一文便够了 摘要 集中展示 笑脸和动物 人 庆贺和物品 食品和物 交通和地点 符号 符号表
  • QT编译警告 warning LNK4042: 对象被多次指定;已忽略多余的指定

    目录 场景复现 解决方案 场景复现 在一次移植QT工程时 发现qmake完成后报了下面一个警告 warning LNK4042 对象被多次指定 已忽略多余的指定 因为我只是移植工程 所以问题只能出在pro配置文件中 反复仔细观看发现在源文件
  • JS/TS格式化日期

    interface Date format this Date fmt string gt string Date prototype format function fmt const ss new Map M this getMonth
  • UE4C++泛型蓝图节点之K2Node蓝图节点

    UE4C 泛型蓝图节点之K2Node蓝图节点 前言 上篇我们讲解了以CustomThunk方式创建自定义泛型节点 今天在此我们讲解以K2Node实现自定义蓝图节点 首先 我们来比较这俩种方法 CustomThunk创建泛型节点时 代码简洁
  • 2014年第五届蓝桥杯Java程序设计本科B组决赛 供水设施(编程大题)

    2014年第五届蓝桥杯Java程序设计本科B组决赛个人题解汇总 https blog csdn net daixinliangwyx article details 89948727 第六题 标题 供水设施 交题测试链接 https www
  • IDEA配置Maven

    1 IDEA配置Maven环境 先在IDEA中配置Maven环境 选择 IDEA中 File gt Settings 搜索 maven 设置 IDEA 使用本地安装的 Maven 并修改配置文件路径 2 IDEA 创建 Maven项目 创建
  • sklearn实战之决策树

    sklearn实战系列 1 sklearn实战之决策树 2 sklearn实战之随机森林 3 sklearn实战之数据预处理与特征工程 4 sklearn实战之降维算法PCA与SVD 5 sklearn实战之逻辑回归与制作评分卡 6 skl
  • 《乌合之众》读书笔记

    作者 法 古斯塔夫 勒庞 译者 马晓佳 背景 法国大革命 导言 群体的时代 真正的历史变革 并不是那些以宏伟和暴力的场景令我们震惊的事情 能够令文化实现伟大复兴的唯一重要的变化 是对思想 观念和信仰产生影响的变化 令人印象深刻的历史事件只不
  • [CCPC] 2017秦皇岛 NumbersI

    题目描述 DreamGrid has a nonnegative integer n He would like to divide n into m nonnegative integers a1 a2 am and minimizes
  • LeetCode高频算法刷题记录4

    文章目录 1 二叉树的最近公共祖先 中等 1 1 题目描述 1 2 解题思路 1 3 代码实现 2 全排列 中等 2 1 题目描述 2 2 解题思路 2 3 代码实现 3 相交链表 简单 3 1 题目描述 3 2 解题思路 3 3 代码实现
  • Ubuntu18.04 下载与安装

    阿里云里面有很多镜像 https opsx alibaba com mirror Ubuntu各个版本的镜像下载地址 http mirrors melbourne co uk ubuntu releases 最新百度经验 Ubuntu19
  • 纯HTML+CSS网页设计——林允儿(可做网页课程作业)

    作品介绍 网页为作者一次课程作业 效果个人觉得还行 其中抛弃了导航栏的使用 主要每次都导航栏 写烦了 采用的是图谱的形式 主要也是因为最近在学 页面主要有6个 有三个是较重复的 所以主要页面是四个 具体的直接看图吧 作品展示 首页 首页背景
  • Python全面解读2018电影票房市场

    作者 法纳斯特 来源 法纳斯得 双11已经过去 双12即将来临 离2018年的结束也就2个月不到 还记得年初立下的flag吗 完成了多少 相信很多人和我一样 抱头痛哭 本次利用猫眼电影 实现对2018年的电影大数据进行分析 01 网页分析
  • FeatureToggle

    概述 为了控制功能开启与关闭 减少代码中的if else繁琐的逻辑判断 主要通过spring的aop及java的注解实现 目前主要包含6个部分的代码 支持内存存储和部分策略 源码git 稍后放源码 功能 单个开关的配置 开关组的配置 通过组