其实所谓的框架就是通过一些配置文件来将需要运行的模块以及类、方法在软件启动的时候自动运行。如果将需要运行类以及模块配置在文件中那么便于后期的一个维护。
1.创建一个配置文件如下
1 class=Service.UserService
2 method=autoRun
3 value=唐僧,孙悟空
2. 创建两个实现接口的服务类
1 2 UserService.java 3 public class UserService implements Service{ 4 // 提供自动运行的方法 5 public void autoRun(String names){ 6 // 使用,号切割用户列表 7 String [] ns = names.split(","); 8 // 遍历 9 for(String name:ns){10 System.out.println("姓名: "+name);11 }12 } 13 }14 StartService.java15 public class StartService implements Service {16 // 提供自动运行的方法17 public void autoRun(String names){18 // 使用,号切割用户列表19 String [] ns = names.split(",");20 // 遍历21 for(String name:ns){22 System.out.println(name);23 }24 } 25 }26 以上的两个类拥有共同的方法因此可以抽取为接口27 Service.java28 public interface Service {29 // 提供自动运行的方法30 public abstract void autoRun(String names);31 }
3.直接编写一个Main.java进行逻辑处理
1 public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { 2 Properties properties=new Properties(); 3 properties.load(new BufferedReader(new FileReader(new File("configure.ini")))); 4 String str_class=(String) properties.getProperty("class"); 5 String str_method=(String)properties.getProperty("method"); 6 String str_value=(String)properties.getProperty("value"); 7 System.out.println(str_class); 8 System.out.println(str_method); 9 System.out.println(str_value);10 for(Map.Entry e:properties.entrySet())11 {12 System.out.println(e.getKey()+" "+e.getValue());13 }14 Class clazz=Class.forName(str_class);15 Constructor con = clazz.getConstructor();16 Service service=(Service) con.newInstance();17 Method method=clazz.getMethod(str_method,String.class);18 service.autoRun(str_value);19 }
参考人家的事例中文解释
1 public static void main(String[] args) throws Exception{ 2 // 1. 获取配置信息 3 Properties ps = new Properties(); 4 // 2. 装载文件数据 5 ps.load(new FileInputStream(new File("jnb.ini"))); 6 // 3. 获取数据 7 String str_clazz = ps.getProperty("run"); 8 String str_method = ps.getProperty("me"); 9 String str_value = ps.getProperty("value");10 // 4. 反射获取Class对象11 Class clazz = Class.forName(str_clazz);12 // 5. 创建对象13 Constructor con = clazz.getConstructor(null);14 Service service = (Service)con.newInstance(null);15 // 6. 调用相关的方法16 Method method = clazz.getMethod(str_method, String.class);17 method.invoke(service, str_value);18 }
这样的话就基本的实现了一个框架的模拟,大家以后就可以同配置文件的形式修改程序运行的服务类了。