SSM使用自定义ConditionalOnProperty实现按需加载spring bean
SSM使用自定义ConditionalOnProperty实现按需加载spring bean
背景: 公司提供的系统框架是SSM架构,SSM架构是没有springboot的ConditionalOnProperty注解的,而我们的系统是在很多区县部署的,每个区县会有一些定制化需求,其中有一个类只在一个区县里用得到,所以打算采用按需加载bean的方式。
实现过程
首先SSM里面是有Condition接口的,该接口的主要功能是实现spring在加载bean的时候对类进行检查,如果满足条件的话才会加载到spring容器里面,具体的条件和逻辑是靠子类实现的
所以我们创建了一个Condition的实现类PropertiesCondition
public class PropertiesCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
Map<String, Object> annotationAttributes = annotatedTypeMetadata.getAnnotationAttributes(CustomConditionalOnProperty.class.getName());
String name = String.valueOf(annotationAttributes.get("name"));
// 期望值
String expectedValue = String.valueOf(annotationAttributes.get("havingValue"));
// 当前值
String value = conditionContext.getEnvironment().getProperty(name);
return Objects.equals(expectedValue, value);
}
}
搭配上CustomConditionalOnProperty注解来使用
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Conditional({PropertiesCondition.class})
public @interface CustomConditionalOnProperty {
/**
* 配置名称
*
* @return
*/
String name();
/**
* 值
*
* @return
*/
String havingValue();
/**
* 缺省值
*
* @return
*/
boolean defaultValueIfMissing() default false;
}
最后在我们需要的地方使用
@Component
@CustomConditionalOnProperty(name = "task.auto.enable",havingValue = "1")
完结 撒花!!!
SSM使用自定义ConditionalOnProperty实现按需加载spring bean的更多相关文章
- Spring Boot中采用Mockito来mock所测试的类的依赖(避免加载spring bean,避免启动服务器)
最近试用了一下Mockito,感觉真的挺方便的.举几个应用实例: 1,需要测试的service中注入的有一个dao,而我并不需要去测试这个dao的逻辑,只需要对service进行测试.这个时候怎么办呢 ...
- vue路由管理-保留滚动位置功能、按需加载模块名自定义
路由管理:保留滚动位置 其实现与组件的keep-alive相关,仅设置了keep-aive的页面,实施保留回退位置能力. keep-alive介绍 作用 把切换出去的组件保留在内存中,可以保留它的状态 ...
- 在webpack自定义配置antd的按需加载和修改主题色
最近使用antd来做react项目的UI.从antd官网上,在使用create-react-app脚手架搭建项目时步骤如下: (1)添加模块 react-app-rewired, babel-plug ...
- 仿ElementUI构建自己的Vue组件库用babel-plugin-component按需加载组件及自定义SASS主题
最近使用ElementUI做项目的时候用Babel的插件babel-plugin-component做按需加载,使得组件打包的JS和CSS包体积大大缩小,加载速度也大大提升,所有想模仿做一个组件库也来 ...
- 转载 yii2-按需加载并管理CSS样式/JS脚本
一.资源包定义 Yii2对于CSS/JS 管理,使用AssetBundle资源包类. 创建如下: backend/assets/AppAsset.php namespace backend\asset ...
- 经验总结:按需加载JS和css
项目中做过这样的事情:所有页面都通过SSI指令 include这样一份public-js.shtml, 用来引入涉及到的js(包括公共的脚本 验证插件 自定义组件等),但是一些没有交互效果的页面根本不 ...
- 【webpack整理】一、安装、配置、按需加载
如果你: 是前端热爱者 :) 有JavaScript/nodejs基础 会使用一些常用命令行,mkdir,cd,etc. 会使用npm 想对webpack有更深的认识,或许此时你恰好遇到关于webpa ...
- React(九)create-react-app创建项目 + 按需加载Ant Design
(1)create-react-app如何创建项目我前面第一章介绍过了,这里就不过多写了, (2)我们主要来说说按需加载的问题 1. 引入antd npm install antd --save 2. ...
- 快速搭建react项目骨架(按需加载、redux、axios、项目级目录等等)
一.前言 最近整理了一下项目骨架,顺便自定义了一个脚手架,方便日后使用.我会从头开始,步骤一步步写明白,如果还有不清楚的可以评论区留言.先大致介绍一下这个骨架,我们采用 create-react-ap ...
- 前端性能优化之按需加载(React-router+webpack)
一.什么是按需加载 和异步加载script的目的一样(异步加载script的方法),按需加载/代码切割也可以解决首屏加载的速度. 什么时候需要按需加载 如果是大文件,使用按需加载就十分合适.比如一个近 ...
随机推荐
- C++ 错误 具有类型“const sort”的表达式会丢失一些 const-volatile 限定符以调用“bool sort::operator ()(int,int)” 如下:环境 vs2019 内容:set内置函数排序
C++ 错误 具有类型"const sort"的表达式会丢失一些 const-volatile 限定符以调用"bool sort::operator ()(int,int ...
- 英语字母z解析.drawio
英语字母z解析.drawio
- 50HZ陷波器的原理和实物开发设计
原理 陷波滤波器指的是一种可以在某一个频率点迅速衰减输入信号,以达到阻碍此频率信号通过的滤波效果的滤波器.陷波滤波器属于带阻滤波器的一种,只是它的阻带非常狭窄,起阶数必须是二阶(含二阶)以上. ...
- Atom 编辑器实时预览 HTML 页面经典方法
为什么需要这样一个工具? 每次预览 HTML 页面,都需要打开各种浏览器:哪怕不是调试,只是为了查看下效果:切换来切换去,各种刷新,感觉有些浪费时间:以前用过 DW 的实时预览,感觉这个功能很赞: ...
- day06-IO流应用01
Java坦克大战06 8.IO流应用01 坦克大战6.0版 增加功能: 防止敌人坦克重叠运动 记录玩家的成绩(累计击毁坦克数),存盘退出 记录当时的敌人坦克坐标,存盘退出 玩游戏时,可以选择是开新游戏 ...
- Android USB开发1—开发环境搭建
通过Genymotion 与 VirtualBox 可以实现将电脑中的USB设备转接到Android模拟器中进行通信. Genymotion 配置 首先从https://www.genymotion. ...
- Android Studio源码导入与调试
从事Android开发都需要涉及到Android源码的阅读,特别是系统应用或者Framework开发,读代码的时间远远比写代码的时间更多. 一. 生成iml与ipr 在Android Studio中导 ...
- System design summary
system design https://github.com/donnemartin/system-design-primer Performance vs scalability scalabi ...
- 工作中常用且容易遗忘的 CSS 样式清单
注:本文转载自公众号 Vue中文社区的一篇文章 1.文字超出部分显示省略号 单行文本的溢出显示省略号(一定要有宽度) p{ width:200rpx; overflow: hidden; ...
- Win10 如何在桌面显示我的电脑
Win10桌面右键鼠标,然后在弹出来的选项中选择个性化. 选择了个性化后会弹出设置界面,在设置中选择[主题] 找到[桌面图标设置] 点击[桌面图标设置],会弹出一个对话框,该对话框有可以设置显示的图标 ...