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的方法),按需加载/代码切割也可以解决首屏加载的速度. 什么时候需要按需加载 如果是大文件,使用按需加载就十分合适.比如一个近 ...
随机推荐
- Python 初学者容易踩的坑
哈喽大家好,我是咸鱼. 今天咸鱼列出了一些大家在初学 Python 的时候容易踩的一些坑,看看你有没有中招过. 原文:https://www.bitecode.dev/p/unexpected-pyt ...
- Navicat 通过 Http通道 连接远程 Mysql
https://jingyan.baidu.com/article/3d69c551aa54dff0cf02d7a0.html 注意本机ip填写 localhost
- GoFrame 优化接口的错误码和异常的思路
前言 你是否想在使用 GoFrame 的过程中,拥有一个能打印异常堆栈,能自定义响应状态码,能统一处理响应数据的接口.如果你回答是,那么,请耐心看完本文,或许会对你有所启发.若文中由表达不当之处,恳请 ...
- Mysql导出导入操作
安装mysql客户端 # 在终端上下载mysql源 wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm ...
- Window10系统通过软件切换扬声器与耳机的音源输出
原文地址: Window10系统通过软件切换扬声器与耳机的音源输出 - Stars-One的杂货小窝 个人平常一般使用扬声器,但有时候直播或和别人打游戏的时候,可能会带上耳机 目前的情况就是手动去插播 ...
- 谈谈Android中的消息提示那些坑
Android中的消息提示无非就那几种,弹个窗(Toast或SnackBar),或者是弹出个对话框(Dialog),最近在使用的时候也是遇到了问题,有时候导致APP闪退 稍微研究会,总结了一下使用过程 ...
- Spring boot返回时间与MySql数据库中不相同问题及解决方法
最近做项目测试的发现,访问Url返回的时间与数据库中的不相同,环境是Spring boot+MyBatis+Mysql(阿里云服务器),经过一番折腾,得到了解决 问题描述 我是直接使用IDEA的数据库 ...
- Android13源码下载环境搭建
由于AOSP的下载&编译等工作,需要用到git与python的支持,所以需要提前安 装好 VMware解决Ubuntu不占满全屏问题和Windows复制粘贴问题 https://blog.cs ...
- AHandler AMessage ALooper消息机制-源码6.0.0以上
AHandler AMessage ALooper消息机制 AHandler是Android native层实现的一个异步消息机制,在这个机制中所有的处理都是异步的,将变量封装到一个消息AMessag ...
- 一个简单的RTMP服务器实现 --- RTMP与FLV
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...