Java中通过修改配置文件实现接口或抽象类子类的切换
来源:互联网 发布:linux的shell命令 编辑:程序博客网 时间:2024/05/08 03:37
我们开发的项目中有可能针对不同的数据库,因此同一个Dao接口可能提供了针对不同数据库的实现。下面我们通过修改properties配置文件的方式来实现同一个接口调用不同子类的实现,这样我们不用去修改源代码,只需要修改配置文件就可以实现调用不同的子类中的方法。该博客参考自《黑马JavaEE12期》。
具体的代码如下:
1、第一步:创建一个普通的Java Project
2、定义一个接口A和A接口的两个实现类
①A接口定义如下
package cn.itcast.jaxp.demo;public interface A { void show();}
②A接口的第一个实现类定义如下
package cn.itcast.jaxp.demo;public class Aimpl1 implements A { public void show() { System.out.println("这是A接口的第一个实现类"); }}
③B接口的第二个实现类如下
package cn.itcast.jaxp.demo;public class Aimpl2 implements A { public void show() { System.out.println("这是B接口的第二个实现类"); }}
3、定义一个抽象类B和B的两个子类
①抽象类B定义如下
package cn.itcast.jaxp.demo;public abstract class B { abstract void eat();}
②B的第一个子类定义如下
package cn.itcast.jaxp.demo;public class Bimpl1 extends B { @Override public void eat() { System.out.println("这是抽象类B的第一个实现类"); }}
③B的第二个子类定义如下
package cn.itcast.jaxp.demo;public class Bimpl2 extends B { @Override public void eat() { System.out.println("这是抽象类B的第二个实现类"); }}
4、定义一个properties文件,beanFactory.properties中的代码如下
#key是接口或抽象类简单名,value是具体的子类名(全名)A=cn.itcast.jaxp.demo.Aimpl1B=cn.itcast.jaxp.demo.Bimpl1
5、定义读取beanFactory.properties的工具类,BeanFactory.java中的代码如下
package cn.itcast.jaxp.demo;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.Properties;/** * 工具类 */public class BeanFactory { private static Properties prop = new Properties(); //将加载写到静态代码块中,只用加载一次 static{ try { //1、加载配置文件 prop.load(new FileInputStream("src/beanFactory.properties")); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 使用泛型实现通用 * @param c * @return */ public static <T> T getBean(Class<T> c) { try { //2、取出用哪个实现类,c.getSimpleName()会返回类名(不含包名) String className = prop.getProperty(c.getSimpleName()); //3、根据完整类名创建实例并返回 @SuppressWarnings("unchecked") Class<T> clazz = (Class<T>) Class.forName(className); return clazz.newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null; }}
6、编写测试类,Test.java中的代码如下
package cn.itcast.jaxp.demo;public class Test { public static void main(String[] args) { //创建一个A后代的实例 A a = BeanFactory.getBean(A.class); a.show(); //创建一个B后代的实例 B b = BeanFactory.getBean(B.class); b.eat(); }}
7、运行Test.java,控制台打印如下内容
这是A接口的第一个实现类这是抽象类B的第一个实现类
修改beanFactory.properties中value值如下:
#key是接口或抽象类简单名,value是具体的子类名(全名)A=cn.itcast.jaxp.demo.Aimpl2B=cn.itcast.jaxp.demo.Bimpl2
运行Test.java,控制台打印如下内容:
这是B接口的第二个实现类这是抽象类B的第二个实现类
阅读全文
0 0
- Java中通过修改配置文件实现接口或抽象类子类的切换
- 通过配置文件切换接口的实现类
- java 子类 抽象类 接口
- Java-子类同时继承抽象类和实现接口
- java 中关于抽象类和接口的范例,通过多态中的向上转移实现
- Java中通过dom4j读取配置文件实现抽象工厂+反射
- Java中通过dom4j读取配置文件实现抽象工厂+反射
- Java中通过dom4j读取配置文件实现抽象工厂+反射
- java中抽象类实现接口的小技巧
- Java中抽象类实现接口
- Java中如何获得所有实现该接口的子类
- 请问java中,抽象类里的抽象方法都要在它的子类中全部实现吗?能不能有些抽象方法不实现?
- JAVA-获取实现了指定接口类的所有实现类或继承了指定类的所有子类
- 实现类A可以在父类B或子类C中实现接口D的方法
- Java中接口的定义与实现接口抽象方法
- Java中接口的定义与实现接口抽象方法
- Java中接口定义及实现接口的抽象方法
- Java第三周-根据类关系图实现抽象类,接口,子类
- android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@f
- jvm
- unity3d发布PC端后的exe程序,怎么保证只能开一个实例,不能多开?
- C# 隐式类型转换(转载)
- Linux c判断文件是否存在
- Java中通过修改配置文件实现接口或抽象类子类的切换
- microsoft office visio 2007 安装过程中出错的解决(直接看后面)
- HTML-事件(Event)的总结
- mybatis学习资料
- Spark SQL 处理流程分析 (一)
- ctrl+c不能终止进程(busybox提示can't access tty.job control
- 混合式学习,以学习者为中心的新型教学形式
- css overflow详解
- 我的个人站点搭建 在Idea 中用Spring + SpringMVC + Hibernate 实现 “hello world”