软件项目实训及课程设计指导——如何应用策略设计模式的思想设计通用的数据库连接类
1、应用属性配置文件分离策略设计模式中的上下文环境类的工作参数
(1)在示例项目中添加一个名称为classNameConfig.properties的属性配置文件
根据Java系统平台中对属性文件(*.properties)解析的基本要求,该属性配置文件应该要存放在软件应用系统的classpath所在的路径中。该路径对于Web方式的应用程序则是在WEB–INFO/classes目录下。
但读者一定要注意属性配置文件(*.properties)的相对路径,否则对属性配置文件进行解析的程序将会由于找不到此属性配置文件而抛出找不到文件的异常错误信息。
因此,读者只需要在MyEclipse开发工具中右击项目的src文件夹,并在弹出的的对话框中输入属性配置文件名classNameConfig.properties。最后的操作结果的图示请见下图示例图所示。
(2)设计属性配置文件classNameConfig.properties中的配置项目
由于Java属性配置文件(*.properties)的项目内容是“键/值”对的形式存储,因此根据项目的数据库连接的需要分别提供五个不同的属性项目。
每个项目的内容请见下图所示的内容——它们分别代表MySQL数据库的JDBC驱动程序类、MySQL数据库文件webbank和在该数据库中的账号root和密码root等信息。
2、构建策略设计模式中的上下文环境类的功能实现代码
在本示例中的策略设计模式中的上下文环境类需要从属性配置文件中获得对应的工作参数,因此需要设计一个获得属性配置文件中的各个属性项目的ClassNameConfig程序类。
在java.lang.Class类中的getResourceAsStream方法将直接返回一个InputStream类型的流对象实例,而getResourceAsStream功能方法是查找具有给定名称的资源并返回InputStream对象。
但要注意的是:getResourceAsStream功能方法在查找和定位属性配置文件时是相对于“/”根路径下的位置——这样的路径是指定绝对路径;如果在标识属性配置文件时不以“/”字符开头,则查找和定位的路径是相对于这个程序类(也就是ClassNameConfig程序类)文件所在包的路径。比如,下面的程序代码示例:
InputStreamoneInputStreamObject=
ClassNameConfig.class.getResourceAsStream(/classNameConfig.properties);
而java.lang.ClassLoader类中的getResource()功能方法则是从系统的classpath的根路径开始查找带有给定名称的资源路径和文件名并返回一个URL类型的对象示例。当然,当指定的程序类名字不能在当前的classpath目录路径中找到时,getResource()功能方法将返回null。
java.lang.Thread类中的contextClassLoader属性则代表线程的上下文ClassLoader,因为每个运行中的线程都有一个成员contextClassLoader属性对象,用来在运行时动态地载入其它的程序类。并且可以采用下面形式的程序代码获得当前线程的contextClassLoader对象实例。
ClassLoadercurrentClassLoader=Thread.currentThread().getContextClassLoader();
因此,如果在某个线程中需要应用并加载某个外部的功能类,可以首先利用Thread.currentThread().getContextClassLoader()功能方法获得该线程的对象实例的contextClassLoader;然后再利用所获得的contextClassLoader对象实例请求它的父ClassLoader对象实例来完成外部程序类的载入请求。
完整的ClassNameConfig程序类的功能实现代码请见下面的程序代码示例所示——ClassNameConfig类的功能实现代码示例
package