在 javaweb开发中,往往一些通用的属性都定义到常量类中,而常量类中的常量又怎么赋初始值呢,可以再配置文件,可以直接赋值,可以在webstart的时候从数据库查询出来数据赋值

从数据库查询数据出来进行反射赋值 ,完全基于数据库配置


  1. <bean name="webstartup" class="com.dadi.oa.system.WebStartUp" init-method="init" singleton="true">
  2. <property name="dao"><ref bean="simpleDao"/></property>
  3. </bean>

init方法

  1. public void init() {
  2. logger.info("====== init system'info begin =====");
  3. initConstants();
  4. initHardwareInfo();
  5. initUser();
  6. initDepartment();
  7. initAppType();
  8. initPosition();
  9. initReviewersInfo();
  10. //加载系统的权限信息
  11. initAuthModule();
  12. initAuthRole();
  13. initAuthUserUtil();
  14. initAuthMenuUtil();
  15. initAnthIP();
  16. logger.info("====== init system'info begin =====");
  17. }

initConstants方法

  1. public void initConstants(){
  2. logger.info("====== init Constants'info begin =====");
  3. try {
  4. List dList = (ArrayList<Map>) dao.getMapList(
  5. " select a.constantsname as constants, a.developvalue as develop, a.mockvalue as mock, a.releasevalue as release from Constants a where a.deletedflag='0'", -1,1);
  6. ConstantsUtil.initConstants(dList);
  7. } catch (RuntimeException e) {
  8. logger.error("init() ConstantsUtil.Constants_Map error:" + e);
  9. throw new ServiceException(e.getMessage());
  10. }
  11. logger.info("====== init Constants'info begin =====");
  12. }

ConstantsUtil.initConstants 方法  通过反射,获取数据库对应的变量及环境并赋值

  1. /**
  2. * 初始化系统变量
  3. * @param list 数据库中读取的所有集合
  4. */
  5. public static void initConstants(List list){
  6. if(list != null && list.size() > 0){
  7. logger.info("env : " + env);
  8. Constants.envflag = env; //环境标识
  9. /** 初始化Map */
  10. Constants_Map = null;
  11. Constants_Map = Collections.synchronizedMap(new HashMap<String, String>());
  12. /** 遍历传入的List,并写入Map中 */
  13. int len = list.size();
  14. for(int i = 0; i < len; i++){
  15. Map map = (Map)list.get(i);
  16. Constants_Map.put(map.get(cname).toString(), map.get(env).toString());
  17. }
  18. /** 通过反射机制,把Map中的值赋给对应的成员变量 */
  19. Class cclass = ConstantsUtil.class;
  20. Field[] fields = cclass.getFields();
  21. int flen = fields.length;
  22. try {
  23. /** 遍历所有的静态成员变量,根据其类型,把从Map中取到的值进行类型转换 */
  24. for(int i = 0; i < flen; i++){
  25. String value = Constants_Map.get(fields[i].getName());
  26. if(value != null){
  27. String ftype = fields[i].getType().getName(); /** 获取静态成员的数据类型 */
  28. if(ftype.equals("java.lang.String")){
  29. fields[i].set(cclass, value);
  30. }
  31. if(ftype.equals("java.lang.Integer") || ftype.equals("int")){
  32. fields[i].set(cclass, Integer.parseInt(value));
  33. }
  34. if(ftype.equals("java.lang.Boolean") || ftype.equals("boolean")){
  35. fields[i].set(cclass, Boolean.parseBoolean(value));
  36. }
  37. if(ftype.equals("java.lang.Long") || ftype.equals("long")){
  38. fields[i].set(cclass, Long.parseLong(value));
  39. }
  40. logger.info(fields[i].getName() + " : " + ftype + " : " + value);
  41. }
  42. }
  43. } catch (IllegalArgumentException e) {
  44. // TODO Auto-generated catch block
  45. logger.info("error is: " + e.getMessage());
  46. } catch (IllegalAccessException e) {
  47. // TODO Auto-generated catch block
  48. logger.info("error is: " + e.getMessage());
  49. }
  50. }


数据库结构




java 从数据库取值反射给变量的更多相关文章

  1. locust参数化(数据库取值)

    locust参数化(数据库取值) 基于上一篇参数化的梳理,本篇用另一种方法从数据库中取出这100个用户来登录 思路:在 TaskSet 中的 on_start 方法表示执行任务前的操作,可以将数据库取 ...

  2. django-models 数据库取值

    django.shortcuts import render,HttpResponse from app01.models import * # Create your views here. def ...

  3. java数据类型,取值范围,引用类型解析

      与javascript不同,Java是强类型语言,在定义变量前需要声明数据类型.主要分两种数据类型:基本数据类型和引用数据类型. 1.基本数据类型分析: 基本数据类型 数值型 整数型 byte字节 ...

  4. java基本数据类型取值范围

    在JAVA中一共有八种基本数据类型,他们分别是 byte.short.int.long.float.double.char.boolean 整型 其中byte.short.int.long都是表示整数 ...

  5. 关于模板中的动态取值 ---反射与javascript脚本编译

    在项目中经常遇到一个问题,打印word或者打印excel的时候,我们经常使用一对一的赋值或者批量替换的方式来对模板进行修改. 但是现在遇到两种场景: 1.取值是通过自定以方法进行取值的. 如:一个销售 ...

  6. java的map取值

    第一种方法根据键值的名字取值 import java.util.HashMap; import java.util.Map; /**   * @param args   */  public stat ...

  7. 跟着太白老师学python day10 名称空间,作用域和取值顺序,变量的加载顺序

    名称空间分为3种: 1. 全局名称空间 2. 内置名称空间 3. 局部名称空间(临时) 作用域 全局作用域              1全局名称空间 2 内置名称空间 局部作用域           ...

  8. java中byte取值范围为什么是 -128到127

    概念:java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数.正数补码为其本身:负数补码为其绝对值各位取反加1:例如:+21,其二进制表示形式是000101 ...

  9. 与Mysqli相关的四种数据库取值

    <!--取值方案一:通过数字数组 fetch_row()--><meta http-equiv="Content-Type" content="text ...

随机推荐

  1. MVC时间对比及时间范围判断

    方法一:使用DateTime.Compare 方法 public static int Compare( DateTime t1, DateTime t2 ) t1 早于 t2:小于零t1 与 t2  ...

  2. exeption ORA-00907: missing right parenthesis

      exeption ORA-00907: missing right parenthesis CreationTime--2018年8月16日11点11分 Author:Marydon 1.情景展示 ...

  3. 微信QQ的二维码登录原理js代码解析

    这篇文章主要大家详细解析了微信QQ的二维码登录原理js代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在很多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗 ...

  4. CAS 5.1.x 的搭建和使用(四)—— 配置使用HTTP协议访问的服务端

    CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...

  5. 华硕M2A-VM+AMD4000超频方法

    华硕M2A-VM+AMD4000超频方法2009-07-07 09:42 1.4000+默认外频为200,倍频已经锁定为10.5,实际运行频率为2100HZ.超频是通过提高外频来实现的,只要适当提高外 ...

  6. log4j 日志 配置 学习

    1.用的flume-log4j  avrosource的整合 2.学习如何指定类打印日志 #log4j.rootLogger=INFO,flume 这个是将全部的日志会打印出来 log4j.logge ...

  7. [CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口(转)

    转自:[CXF REST标准实战系列] 二.Spring4.0 整合 CXF3.0,实现测试接口 文章Points: 1.介绍RESTful架构风格 2.Spring配置CXF 3.三层初设计,实现W ...

  8. WCF中可以使用SVCUtil.exe生成客户端代理类和配置文件

    1.找到如下地址“C:\Windows\System32\cmd.exe”  命令行工具,右键以管理员身份运行(视系统是否为win7 而定)         2.输入如下命令: C:\>cd C ...

  9. 自定义Microsoft Visual Studio 代码模板,增加公司和个人信息

    C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplates\CSharp目录里面有各种新建模板分类: 修 ...

  10. OAF_OAF控件系列7 - Tree的实现(案列)

    2014-06-02 Created By BaoXinjian