采用DOM4J+单例模式实现XML文件的读取

大家对XML并不陌生,它是一种可扩展标记语言,常常在项目中作为配置文件被使用。XML具有高度扩展性,只要遵循一定的规则,XML的可扩展性几乎是无限的,而且这种扩展并不以结构混乱或影响基础配置为代价。项目中合理的使用配置文件可以大大提高系统的可扩展性,在不改变核心代码的情况下,只需要改变配置文件就可以实现功能变更,这样也符合编程开闭原则。

但是我们把数据或者信息写到配置文件中,其他类或者模块要怎样读取呢?这时候我们就需要用到XML API。DOM4Jj就是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,下面我们就以java程序连接Oracle数据库为例,简单看一下如何使用配置文件提高程序的可扩展性以及DOM4J如何读取配置文件。

未使用配置文件的程序

<span style="font-family:KaiTi_GB2312;font-size:18px;">/* * 封装数据库常用操作 */public class DbUtil {/* * 取得connection */public static Connection getConnection(){Connection conn=null;try {Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@localhost:1525:bjpowernode";String username = "drp1";String password = "drp1";conn=DriverManager.getConnection(url, username, password);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}}</span> 我们可以看到上面代码中DriverName、url等信息都是都是写死在代码中的,如果数据库信息有变更的话我们必须修改DbUtil类,这样的程序扩展性极低,是不可取的。

我们可以把DriverName、url等信息保存到配置文件中,这样如果修改的话只需要修改配置文件就可以了,程序代码根本不需要修改。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?><config><db-info><driver-name>oracle.jdbc.driver.OracleDriver</driver-name><url>jdbc:oracle:thin:@localhost:1525:bjpowernode</url><user-name>drp1</user-name><password>drp1</password></db-info></config></span> 然后我们还需要建立一个配置信息类来用来存取我们的属性值

<span style="font-family:KaiTi_GB2312;font-size:18px;">/* * jdbc配置信息 */public class JdbcConfig {private String driverName;private String url;private String userName;private String password;public String getDriverName() {return driverName;}public void setDriverName(String driverName) {this.driverName = driverName;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn this.getClass().getName()+"{driverName:" + driverName + ",url:" + url + ",userName:" + userName + "}";}}</span> 接下来就是用DOM4J读取XML信息,并把相应的属性值保存到JdbcConfig中

<span style="font-family:KaiTi_GB2312;font-size:18px;">/* * DOM4J+单例模式解析sys-config.xml文件 */public class XmlConfigReader {//懒汉式(延迟加载lazy)private static XmlConfigReader instance=null;//保存jdbc相关配置信息private JdbcConfig jdbcConfig=new JdbcConfig();private XmlConfigReader(){SAXReader reader=new SAXReader();InputStream in=Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");try {Document doc=reader.read(in);//取得jdbc相关配置信息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/user-name");Element passwordElt=(Element)doc.selectObject("/config/db-info/password");//设置jdbc相关配置信息jdbcConfig.setDriverName(driverNameElt.getStringValue());jdbcConfig.setUrl(urlElt.getStringValue());jdbcConfig.setUserName(userNameElt.getStringValue());jdbcConfig.setPassword(passwordElt.getStringValue());} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static synchronized XmlConfigReader getInstance(){if (instance==null){instance=new XmlConfigReader();}return instance;}/* * 返回jdbc相关配置 */public JdbcConfig getJdbcConfig(){return jdbcConfig;}public static void main(String[] args){JdbcConfig jdbcConfig=XmlConfigReader.getInstance().getJdbcConfig();System.out.println(jdbcConfig);}}</span> 然后我们的数据库操作类就可以使用XML文件中的属性值了

<span style="font-family:KaiTi_GB2312;font-size:18px;">/* * 封装数据库常用操作 */public class DbUtil {/* * 取得connection */public static Connection getConnection(){Connection conn=null;try {JdbcConfig jdbcConfig=XmlConfigReader.getInstance().getJdbcConfig();Class.forName(jdbcConfig.getDriverName());conn=DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword());} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}}</span> 现在我们可以看出来DriverName、url等信息都是通过jdbcConfig直接获得的,,而jdbcConfig中的数据是通过DOM4J读取的XML,这样数据库信息有变动我们只需要通过记事本修改XML文件整个系统就可以继续运行,真正做到了程序的可扩展,以不变应万变。

版权声明:本文为博主原创文章,转载请标明出处,谢谢!

更有一种逍遥,浑然忘我,与大自然交融的境界令人心弛神往。

采用DOM4J+单例模式实现XML文件的读取

相关文章:

你感兴趣的文章:

标签云: