BrokerStartup.java
// 指定配置文件 if (commandLine.hasOption('c')) { String file = commandLine.getOptionValue('c'); if (file != null) { configFile = file; InputStream in = new BufferedInputStream(new FileInputStream(file)); properties = new Properties(); properties.load(in); MixAll.properties2Object(properties, brokerConfig); MixAll.properties2Object(properties, nettyServerConfig); MixAll.properties2Object(properties, nettyClientConfig); MixAll.properties2Object(properties, messageStoreConfig); BrokerPathConfigHelper.setBrokerConfigPath(file); System.out.println("load config properties file OK, " + file); } }
MixAll.java
/** * 将Properties中的值写入Object */ public static void properties2Object(final Properties p, final Object object) { Method[] methods = object.getClass().getMethods(); for (Method method : methods) { String mn = method.getName(); if (mn.startsWith("set")) { try { String tmp = mn.substring(4); String first = mn.substring(3, 4); String key = first.toLowerCase() + tmp; String property = p.getProperty(key); if (property != null) { Class<?>[] pt = method.getParameterTypes(); if (pt != null && pt.length > 0) { String cn = pt[0].getSimpleName(); Object arg = null; if (cn.equals("int")) { arg = Integer.parseInt(property); } else if (cn.equals("long")) { arg = Long.parseLong(property); } else if (cn.equals("double")) { arg = Double.parseDouble(property); } else if (cn.equals("boolean")) { arg = Boolean.parseBoolean(property); } else if (cn.equals("String")) { arg = property; } else { continue; } method.invoke(object, new Object[] { arg }); } } } catch (Throwable e) { } } } }
由资源文件生成对象:
首先获取资源文件
获取对象的所有set开头的方法
截取方法,如:setMethod1 则为 method1
通过key获取properties文件value
获取该方法参数类型
调用该方法。
从而完成set 。