zoukankan      html  css  js  c++  java
  • java 从数据库取值反射给变量


    在 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. }


    数据库结构




  • 相关阅读:
    Ubuntu下下载Android源码
    升级Android 3.1ADT 和SDK
    ubuntu10.04手动安装jdk1.6.0_24配置
    安装VM Tools
    Singleton (单件模式)
    biztalk2004安装时应该注意的几点
    欢迎高手加入.NET技术群
    Observer(观察者模式)
    无眠
    A⑤权限管理分配权限:提交的是节点的id列表
  • 原文地址:https://www.cnblogs.com/signheart/p/6595614.html
Copyright © 2011-2022 走看看