IoC容器
个人比较喜欢.Net平台的Windsor,Spring中的类名太长了。
tips包中的工具类FromPropertyFile将在后面的例程中广泛使用。简单的事情用简单的方案。平台 JDK7
package tips;import java.io.*;import java.util.Properties;/** * FromPropertyFile.java. * 简单的事情用简单的方案。 * 使用java.util.Properties类,从Java properties file中读取字符串。 * @author yqj2065 * @version 0.1 */public class FromPropertyFile { /** * @param path .properties文件的路径 * @param key 键 * @return 键对应的值 */ public static String getString(String path,String key){ Properties props = new Properties(); try (InputStream is = FromPropertyFile.class.getClassLoader().getResourceAsStream(path) ){ try(InputStreamReader isr = new InputStreamReader(is,"UTF-8")){ props.load(isr);//从流中加载properties文件信息 } } catch (java.io.FileNotFoundException e) { e.printStackTrace(); } catch (java.io.IOException e) { e.printStackTrace(); } return props.getProperty(key); } /** * @param path .properties文件的路径 * @param key 键 * @return 一个对象 */ public static Object getObject(String path,String key){ String typeName = getString(path,key);//"ioc.properties","typeName" Object obj=null; if(typeName!=null){ try { obj = Class.forName(typeName).newInstance(); } catch (InstantiationException e) {e.printStackTrace(); } catch (IllegalAccessException e) {e.printStackTrace(); } catch (ClassNotFoundException e) {e.printStackTrace(); } } return obj; } /** * "my.properties","typeName" */ public static Object getObject(){ return getObject("my.properties","typeName"); }}
getObject()将从my.properties文件中读取typeName键映射的类全名。my.properties如下:
#本属性配置文件代表从数据库、属性配置文件或XML文件中获得字符串的各种技术。
#本文件用于多个程序,使用前要检查本文件是否进行了必要的修改。
#typeName键必须映射类全名。
typeName=依赖注入.S2
为了避免用java.util.Properties读取中文内容的配置文件时发生中文乱码的现象,请用UTF格式保存.properties文件。一个简单的办法是对.properties文件进行“另存为”,在“编码”列表框中选择UTF-8。