本文主要是介绍自己写BeanFactory,实现读取配置文件,并根据发射创建对象。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
为了使程序尽量的降低耦合程度,提高程序的可维护性,我们一般都会采用写配置文件的方法。
下面,我贴出写的一个BeanFactory类 ,来读取配置文件,并通过java的发射机制创建配置中的对象:
例如我新建一个bean.properties的配置文件, 类容:
userdao = com.tmaic.dao.UserDao;
bookdao = com.tmaic.dao.BookDao;
当然userdao,bookdao必须存在,自己建出来,我就不贴了,下面贴核心的BeanFactory类:
package com.tmaic.util;import java.io.IOException; import java.util.Properties;public class BeanFactory {static Properties pro;//读取配置文件static {pro = new Properties();try {pro.load(BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"));} catch (IOException e) {e.printStackTrace();}}public static Object getBean(String key) {if(pro.containsKey(key)){//获取完全限定名String className = pro.getProperty(key);//通过反射,创建对象Object obj = null;try {obj = Class.forName(className).newInstance();} catch (Exception e) {e.printStackTrace();} return obj;}else{throw new IllegalArgumentException("key不存在");}}}
需要说明的是,上面的程序是懒加载,当请求对象时对象才会创建出来;如果想实现非懒加载,我们要在读取配置文件的时候就把对象给创建出来,如果你有这样的需求,可以迭代pro中的key来一一创建出对象:
贴下迭代的部分:
public class BeanFactory {private static Map<String ,Object> map = new HashMap<String, Object>();private static Properties pro;//读取配置文件static {pro = new Properties();try {pro.load(BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"));for(Entry<Object, Object> entry:pro.entrySet()){String key = entry.getKey().toString();Object obj = Class.forName(entry.getValue().toString()).newInstance();map.put(key, obj);}} catch (Exception e) {e.printStackTrace();}}
这篇关于自己写BeanFactory,实现读取配置文件,并根据发射创建对象。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!