学会 配置文件+反射,走遍全球都不怕.
在应用分层思想的过程中,我们常使用MVC三层架构来处理项目需求的变更。
项目开发过程中,最典型的就是为灵活更换数据库而使用"配置文件+反射"处理需求变更.当然我们还有很多其他的相关信息可以存放到配置文件中,进而把这种系统配置做活.而不是因为有需求变更的时候,去更改源码以达到要求.
在Java和.NET下的"配置文件+反射" 是一样一样滴,都是在配置文件中配置好项目信息 -->写一个配置读取类,获取配置信息 -->把配置信息应用到项目具体代码中。
我们从事开发,学习语言,语言满天下,学习哪一门呢? 其实,没有哪一门会持久辉煌,没有哪一门会一事无成。接触多了,大家会慢慢发现,众多语言都是表里叔亲。抓住核心共同点,也就抓住了这个行业的中坚。
我们今天学会了配置文件+反射,就学会了这样的一种解耦思想和灵活变通的方法,八要学1会1,好好想想为什么这种方法会备受瞩目得到应用?
我们要学会 提纲挈领、追本求源,看透这些技术的表面,抓住这种技术出现的时机背景,发散性的思考我们还有哪些地方是需要这种思想方法的,把问题上移,寻求更深层的答案。让我们做技术做出思想家的感觉来。Oh,Yeah ~
<!-- sys-config.xml 配置文件--> <?xml version="1.0" encoding="UTF-8"?> <config> <db-info> <driver-name>oracle.jdbc.driver.OracleDriver</driver-name> <url>jdbc:oracle:thin:@127.0.0.1:1521:orcl</url> <username>lfsfxy9</username> <password>lfsfxy9</password> </db-info> <item-dao-factory>com.tgb.drp.basedata.factory.daoOracleFactory</item-dao-factory> </config>
//ConfigReader类,xml配置文件读取类。 import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import com.tgb.drp.basedata.factory.ItemDaoFactory; /** * 采用单例模式读取xml配置文件sys-config.xml * * @author lfsfxy9 * */ public class ConfigReader { private static ConfigReader instance = new ConfigReader(); private Document doc; private JdbcInfo jdbcInfo; private String daoFactoryString; private ConfigReader() { try { doc = new SAXReader().read(Thread.currentThread() .getContextClassLoader().getResourceAsStream( "sys-config.xml")); Element driverNameElt = (Element) doc .selectObject("/config/db-info/driver-name"); Element urlElt = (Element) doc.selectObject("/config/db-info/url"); Element usernameElt = (Element) doc .selectObject("/config/db-info/username"); Element passwordElt = (Element) doc .selectObject("/config/db-info/password"); jdbcInfo = new JdbcInfo(); jdbcInfo.setDriverName(driverNameElt.getStringValue()); jdbcInfo.setUrl(urlElt.getStringValue()); jdbcInfo.setUsername(usernameElt.getStringValue()); jdbcInfo.setPassword(passwordElt.getStringValue()); //以上都是读取xml中的数据库链接信息。 //下面是读取xml中<dao-factory>节点的配置信息。 Element daoFactoryElt = (Element)doc.selectObject("/config/dao-factory"); daoFactoryString = daoFactoryElt.getStringValue(); } catch (DocumentException e) { e.printStackTrace(); } } /** * 读取itemdaofactory的配置信息.使用的oracle数据库 * @return */ public String getDaoFactoryString(){ return daoFactoryString; } }
//从ConfigReader类提供的方法中获取配置文件的相关参数信息. String className = ConfigReader.getInstance().getDaoFactoryString(); try { //根据读取配置文件,从而决定实例化哪种数据库处理类。 factory = (DaoFactory)Class.forName(className).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }