3.1.2 实现反射解决方案

该方案实现的 关键实现工厂方法,代码如下:

public class MainApplication {
    private Properties properties;
    private  CustomerDatabase custDB;

    public synchronized CustomerDatabase createDBFacade() {
        if (custDB == null) {
            try {
                // 加载配置文件中 db.class 指定的类
                String className = properties.getProperty("db.class", "com.wci.app.StubCustomerDB");
                // 从字节码加载该类到 JVM
                Class<?> cls = Class.forName(className);
                // 动态实例化该类
                custDB = (CustomerDatabase) cls.newInstance();
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }

        return custDB;
    }
}
  • java.lang.Properties 用来加载配置文件,配置文件中会存储以 db.classkey 存储 Facade 接口实现类的名字(全限定名),任何人都可以通过 修改配置文件 以获取不同的数据库访问代码的实现。
  • Class.forName 方法用来加载 指定类名 的类,注意是从 classpath 路径找到的 字节码 加载的。

results matching ""

    No results matching ""