无论我们是使用hibernate还是使用spring,struts,jsf等等的开源框架,都有一个共同点,那就是程序框架会根据配置文件的不同配置来动态的改变功能的实现,不过,这里的配置文件多是使用xml,xml是一种很很灵活的文档类型,他能够清晰的体现出数据之间的包含从属关系,但是在数据具有key-value映射关系而且相对来说结构简单的情况下,我们可以考虑更加简单的properties文件格式,java对properties提供了更加简单的内置支持;
下面是一个登陆模块,用户登陆的时候会有两种验证方式,一种是db验证,一种是file验证,信息存在于不同的存储介质里面,
下面是代码实现
- package org.osgi.util;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Properties;
- public class LoginUtil {
- public static final String DEFAULTMETHID="DEFAULT";
- private static String getLoginClsName(String filePath,String key) {
- return LoginUtil.getProerties(filePath).getProperty(key);
- }
- /**
- * @return the class name of login
- */
- private static Properties getProerties(String filePath){
- Properties properties=new Properties();
- try {
- InputStream in=new FileInputStream(filePath);
- properties.load(in);
- } catch (FileNotFoundException e) {
- System.out.println("the file can't be found");
- e.printStackTrace();
- } catch (IOException e){
- System.out.println("the file can't be load");
- e.printStackTrace();
- }
- return properties;
- }
- /**
- *
- * @param filePath the configuration file path
- * @return
- */
- public static Object getLoginClsInstance(String filePath) {
- Object instance=null;
- try {
- String loginMethodKey=LoginUtil.getLoginClsName(filePath,LoginUtil.DEFAULTMETHID);
- instance=Class.forName(LoginUtil.getLoginClsName(filePath, loginMethodKey)).newInstance();
- } catch (Exception e) {
- System.out.println("can't get the class");
- e.printStackTrace();
- }
- return instance;
- }
- }
改工具类实现了如何从配置文件中查找出当前所配置的验证方式;
- package org.osgi.login;
- public interface ILogin {
- /**
- * which type login method it is
- */
- public void printf();
- /**
- *
- * @param name the user's name
- * @param pwd the user's password
- * @return is it a user
- */
- public boolean isUser(String name, String pwd);
- }
- package org.osgi.login;
- public class DBLogin implements ILogin {
- public boolean isUser(String name, String pwd) {
- return false;
- }
- public void printf() {
- System.out.println("DBLogin");
- }
- }
- package org.osgi.login;
- public class FileLogin implements ILogin {
- public boolean isUser(String name, String pwd) {
- return false;
- }
- public void printf() {
- System.out.println("fileLogin");
- }
- }
以上是两种登陆模式,方便于相互之间的转换;
- package org.osgi.TestDemo;
- import org.osgi.login.ILogin;
- import org.osgi.util.LoginUtil;
- public class AppDemo {
- /**
- * @param args
- */
- public static void main(String[] args) {
- ILogin loginoer=(ILogin)LoginUtil.getLoginClsInstance("bin/LoginCfg.properties");
- loginoer.printf();
- }
- }
配置文件如下:
db=org.osgi.login.DBLogin
file=org.osgi.login.FileLogin
DEFAULT=file