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


数据库结构




原文地址:https://www.cnblogs.com/signheart/p/6595614.html