一 . 手动从spring中获取bean对象,工具类

package com.meeno.wzq.util;import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;/*** @description: SpringBeanUtil* @author: Wzq* @create: 2019-10-08 16:24*/
@Component
public class SpringBeanUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if(SpringBeanUtil.applicationContext == null) {SpringBeanUtil.applicationContext = applicationContext;}System.out.println("---------------------------------------------------------------------");System.out.println("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext="+SpringBeanUtil.applicationContext+"========");System.out.println("---------------------------------------------------------------------");}//获取applicationContextpublic static ApplicationContext getApplicationContext() {return applicationContext;}//通过name获取 Bean.public static Object getBean(String name){return getApplicationContext().getBean(name);}//通过class获取Bean.public static <T> T getBean(Class<T> clazz){return getApplicationContext().getBean(clazz);}//通过name,以及Clazz返回指定的Beanpublic static <T> T getBean(String name,Class<T> clazz){return getApplicationContext().getBean(name, clazz);}
}

二 . 读取yml配置文件

yml:配置如下

##加密数据标识
encryption:encryptionMap:#分类bank:objectBean: encryptionEnterpriseServicemethod[0]: isRepeatByNamemethod[1]: addEnterprisemethod[2]: getEnterprisemethod[3]: editEnterprisemethod[4]: editEnterpriseDetail#试卷testPaper:objectBean: encryptionTestpaperServicemethod[0]: addTestpapermethod[1]: editTestpapermethod[2]: getTestpapermethod[3]: isRepeatByName#试题question:objectBean: encryptionQuestionServicemethod[0]: addQuestionmethod[1]: updateQuestion#课程course:objectBean: encryptionCourseServicemethod[0]: addCoursemethod[1]: updateCoursemethod[2]: getCourseById#课时p:objectBean: encryptionSectionServicemethod[0]: addSessionmethod[1]: getSectionById#任务task:objectBean: encryptionScheduleServicemethod[0]: addSchedulemethod[1]: getScheduleByIdmethod[2]: updateSchedule#资源resource:objectBean: encryptionBankResServicemethod[0]: addBankResmethod[1]: getBankRes#bannerbanner:objectBean: encryptionBannerServicemethod[0]: addBannermethod[1]: getBannermethod[2]: editBanner#员工职位position:objectBean: encryptionEmployeePositionServicemethod[0]: addEmployeePositionmethod[1]: editEmployeePositionNamemethod[2]: getEmployeePositionNamemethod[3]: isRepeatByName#银行部门department:objectBean: encryptionEmployeeDepartmentServicemethod[0]: addEmployeeDepartmentmethod[1]: editEmployeeDepartmentmethod[2]: getEmployeeDepartmentNamemethod[3]: findEmployeeDepartmentIdByName

开启spring配置转换为bean配置,一般在启动类上加上:

@EnableConfigurationProperties

创建读取配置的类:配置类

package com.meeno.wzq.config;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.HashMap;
import java.util.Map;/*** @description: 私密数据map从配置文件中读取* @author: Wzq* @create: 2019-10-08 14:39*/
@Component
@ConfigurationProperties(prefix = "encryption")
public class EncryptionMapConfig {/*** 从配置文件中读取的encryptionMap开头的数据* 注意:名称必须与配置文件中保持一致*/private Map<String, Map<String,Object>> encryptionMap = new HashMap<>();public Map<String, Map<String,Object>> getEncryptionMap() {return encryptionMap;}public void setEncryptionMap(Map<String, Map<String,Object>> encryptionMap) {this.encryptionMap = encryptionMap;}}

三.使用配置加反射,实现具体功能,(这个具体功能,是我在项目中遇到的,实际开发中,很少遇到,除非二次开发项目)

循环遍历配置的Map,根据配置获取具体的方法Method,把key为方法名称,value为反射的Method保存到另一个static的Map中,以便在其他地方使用。

package com.meeno.wzq.constants;import com.google.common.collect.Lists;
import com.meeno.wzq.util.SpringBeanUtil;import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @description: 私密数据Constants* @author: Wzq* @create: 2019-10-08 14:57*/
public class EncryptionConstants {public static Map<String, Method> encryptionConstantsMap = new HashMap<String,Method>();public static void convert(Map<String,Map<String,Object>> map) throws ClassNotFoundException, NoSuchMethodException {for (String s : map.keySet()) {Map<String,Object> tempMap = map.get(s);String objectBeanStr = tempMap.get("objectBean").toString();Map<String,String> params = (Map<String,String>) ((Map) tempMap.get("method"));List<String> methodList = Lists.newArrayList();if(params!=null){for (String param : params.keySet()) {methodList.add(params.get(param));}}for(String methodStr : methodList){Object objectBean = SpringBeanUtil.getBean(objectBeanStr);Class clazz = objectBean.getClass();Method method = null;for(int i = 0; i < clazz.getMethods().length; i++){Method tempMethod = clazz.getMethods()[i];String methodName = tempMethod.getName();if(methodName.equals(methodStr)){method = tempMethod;break;}}encryptionConstantsMap.put(methodStr,method);}}}}

四 . 加载类,项目启动时运行

package com.meeno.wzq.runner;import com.meeno.trainsys.schedule.service.LearningScheduleService;
import com.meeno.wzq.config.EncryptionMapConfig;
import com.meeno.wzq.constants.EncryptionConstants;
import com.meeno.wzq.util.AuthorizationServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;/*** @program: server-java* @description: 启动项目时启动项目* @author: Wzq* @create: 2019-06-27 20:00*/
@Component
@Order(value = 1)
public class MyApplicationRunner implements ApplicationRunner {@AutowiredLearningScheduleService learningScheduleService;@AutowiredEncryptionMapConfig encryptionMapConfig;@Overridepublic void run(ApplicationArguments applicationArguments) throws Exception {EncryptionConstants.convert(encryptionMapConfig.getEncryptionMap());}
}

技术支持:高岳峰,闫宇峰,施凯雷,杨珂

他的个人博客地址:http://120.78.93.197/

这是我的公众号 有最新的it咨询,和个人工作的记录:

这是我的个人微信遇到问题欢迎,提问:

最后加上高质量的淘宝店:如有质量问题随时滴滴我,童叟无欺!

【童装园服定制店铺】https://m.tb.cn/h.ef2J8CD?sm=6e0f74 点击链接,再选择浏览器咑閞;或復·制这段描述¥zfwjY4JVngW¥后到淘♂寳♀

spring boot读取yml配置集合,反射实战!相关推荐

  1. Spring Boot读取peoperties配置及@Value和@ConfigurationProperties区别和联系

    目录 理论 例子 解决properties文件编码 理论 @ConfigurationProperties注解是把Person加入到容器中, <bean>标签也是加入到容器中: <b ...

  2. spring boot多数据源配置(mysql,redis,mongodb)实战

    使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...

  3. Spring Boot 2.0 配置图文教程

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 ...

  4. Spring Boot 2.0 配置图文教程 1

    Spring Boot 2.0 配置图文教程 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本章内容 自定义 ...

  5. Spring Boot 2.0 配置图文教程第 2 章 Spring Boot 配置## 书信息 demo.book.name=[Spring Boot 2.x Core Action] demo.b

    本章内容 1.自定义属性快速入门 2.外化配置 3.自动配置 4.自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 第 2 章 Spring B ...

  6. SpringBoot - Spring Boot 中的配置体系Profile全面解读

    文章目录 Pre Spring Boot 中的配置体系 配置文件与 Profile 主 application.properties 中指定激活的Profile Profile 配置信息只保存在一个文 ...

  7. requestmapping配置页面后_第004课:Spring Boot 项目属性配置

    在项目中,很多时候需要用到一些配置的信息,这些信息可能在测试环境和生产环境下会有不同的配置,后面根据实际业务情况有可能还会做修改,针对这种情况,我们不能将这些配置在代码中写死,最好就是写到配置文件中. ...

  8. Spring Boot的自动化配置原理

    转载自 Spring Boot的自动化配置原理 随着Ruby.Groovy等动态语言的流行,相比较之下Java的开发显得格外笨重.繁多的配置.低下的开发效率.复杂的部署流程以及第三方技术集成难度大等问 ...

  9. 在Spring Boot中使用配置元数据来配置您的配置

    Spring Boot 1.3.0中发布了许多更新,但是其中一个对我很突出,因为我以前并不了解此更新,它的状态使其成为一项真正有用的功能(不幸的是,撰写本文时仅在Spring Boot中可用)这个). ...

最新文章

  1. RabbitMQ(二):RabbitMQ高级特性
  2. 程序员如何打造个人品牌?
  3. vector 作为dll 接口参数_DLL中传递STL参数,vector对象作为dll参数传递等问题(转)...
  4. 格密码教程(四):SVP和CVP,Hermite定理,Blichfeld定理和Minkowski定理
  5. map函数作用c语言,C语言 · C++中map的用法详解
  6. Jquery.ajax(……)
  7. python rs232_Python监视串口(RS-232)握手信号
  8. Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题
  9. Android网络应用的封装与调度
  10. 输出halloword
  11. 扫雷游戏网页版_世界排名前30,六成都是中国人:2020年,沉迷「扫雷」的玩家是怎样一群人?| 探寻游戏意义...
  12. 通讯录管理系统(C++基础 汇总案例)
  13. 桌面图标文字有蓝底怎么办
  14. 蓝宝石(Al2O3)晶体基片
  15. Pycharm 快捷键盘
  16. 易基因|新品:新型肿瘤标志物检测利器——cfDNA甲基化测序(cfDNA-RBS)
  17. 黄金时代 —— Pytorch学习记录(一)
  18. FastDFS学习笔记 -- day04 与Nginx整合
  19. 聊城大学c语言实验报告,c语言程序设计(包云)c第1章概述.ppt
  20. c语言涛涛,首批国家级一流本科课程!国科大这些“金课”入选啦

热门文章

  1. MPB:扬州大学王梦芝组-​​反刍动物瘤胃原虫的分离培养与形态学分析
  2. Science:固氮(The nitrogen fix)
  3. Nature综述: 地球上细菌和古菌的生物被膜丰度
  4. R语言ggplot2可视化:使用R原生plot函数为指定曲线下面的区域着色、ggplot2可视化在曲线的特定下方添加分割线、ggplot2为指定曲线下面的区域着色
  5. Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组、split函数水平(按列)拆分二维numpy数组
  6. Python中pandas检查dataframe中是否包含某个字段、或者数据列实战、检查dataframe中是否包含某个字段集合
  7. R语言Logistic回归模型案例:低出生婴儿体重的影响因素分析(列线图、校准曲线)
  8. R将因子类型(Factor)转化为字符串类型(Character)
  9. 华为NPU卡ubuntu(无网络连接情况)驱动安装记录
  10. java中打开文件显示_从java程序中打开任何文件