在 javaweb开发中,往往一些通用的属性都定义到常量类中,而常量类中的常量又怎么赋初始值呢,可以再配置文件,可以直接赋值,可以在webstart的时候从数据库查询出来数据赋值
从数据库查询数据出来进行反射赋值 ,完全基于数据库配置
<bean name="webstartup" class="com.dadi.oa.system.WebStartUp" init-method="init" singleton="true">
<property name="dao"><ref bean="simpleDao"/></property>
</bean>
init方法
public void init() {
logger.info("====== init system'info begin =====");
initConstants();
initHardwareInfo();
initUser();
initDepartment();
initAppType();
initPosition();
initReviewersInfo();
//加载系统的权限信息
initAuthModule();
initAuthRole();
initAuthUserUtil();
initAuthMenuUtil();
initAnthIP();
logger.info("====== init system'info begin =====");
}
initConstants方法
public void initConstants(){
logger.info("====== init Constants'info begin =====");
try {
List dList = (ArrayList<Map>) dao.getMapList(
" 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);
ConstantsUtil.initConstants(dList);
} catch (RuntimeException e) {
logger.error("init() ConstantsUtil.Constants_Map error:" + e);
throw new ServiceException(e.getMessage());
}
logger.info("====== init Constants'info begin =====");
}
ConstantsUtil.initConstants 方法 通过反射,获取数据库对应的变量及环境并赋值
/**
* 初始化系统变量
* @param list 数据库中读取的所有集合
*/
public static void initConstants(List list){
if(list != null && list.size() > 0){
logger.info("env : " + env);
Constants.envflag = env; //环境标识
/** 初始化Map */
Constants_Map = null;
Constants_Map = Collections.synchronizedMap(new HashMap<String, String>());
/** 遍历传入的List,并写入Map中 */
int len = list.size();
for(int i = 0; i < len; i++){
Map map = (Map)list.get(i);
Constants_Map.put(map.get(cname).toString(), map.get(env).toString());
}
/** 通过反射机制,把Map中的值赋给对应的成员变量 */
Class cclass = ConstantsUtil.class;
Field[] fields = cclass.getFields();
int flen = fields.length;
try {
/** 遍历所有的静态成员变量,根据其类型,把从Map中取到的值进行类型转换 */
for(int i = 0; i < flen; i++){
String value = Constants_Map.get(fields[i].getName());
if(value != null){
String ftype = fields[i].getType().getName(); /** 获取静态成员的数据类型 */
if(ftype.equals("java.lang.String")){
fields[i].set(cclass, value);
}
if(ftype.equals("java.lang.Integer") || ftype.equals("int")){
fields[i].set(cclass, Integer.parseInt(value));
}
if(ftype.equals("java.lang.Boolean") || ftype.equals("boolean")){
fields[i].set(cclass, Boolean.parseBoolean(value));
}
if(ftype.equals("java.lang.Long") || ftype.equals("long")){
fields[i].set(cclass, Long.parseLong(value));
}
logger.info(fields[i].getName() + " : " + ftype + " : " + value);
}
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
logger.info("error is: " + e.getMessage());
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
logger.info("error is: " + e.getMessage());
}
}
数据库结构
![](https://images2015.cnblogs.com/blog/722496/201703/722496-20170321172717049-1449242561.png)
![](https://images2015.cnblogs.com/blog/722496/201703/722496-20170321172717877-69492864.png)