ResourceBundle :
1)只能加载properties的配置文件
2)只能读取,不能修改和创建
3)创建ResourceBundle的过程是通过他的静态方法
getBundle(“配置文件的名称”)
4)配置文件路径的格式:和类路径相似
com/bean.properties == com.bean
/**
* bean工厂,通过此工厂获取接口的实现类对象
* 所有的全限定类名:bean.properties文件中
*
* 一个请求创建一次对象:
* 单例工厂:
* 1.创建对象
* 1).第一此访问:创建对象并存储
* 2).从内存中获取已创建好的对象
* 2.其他的线程都是使用以创建好的对象
*/
public class BeanFactory {
/**
* 解析properties文件
*/
/**
* ResourceBundle : 1)只能加载properties的配置文件
* 2)只能读取,不能修改和创建
* 3)创建ResourceBundle的过程是通过他的静态方法
* getBundle("配置文件的名称")
* 4)配置文件路径的格式:和类路径相似
* com/bean.properties == com.bean
*
*/
private static ResourceBundle bundle = ResourceBundle.getBundle("bean");
//map<唯一表示,实现类对象>
public static Map<String,Object> map = new HashMap<>();
static {
//解析properties文件,并且存入到map集合中
Enumeration<String> keys = bundle.getKeys();//配置文件中的所有key
while(keys.hasMoreElements()) { //是否还有为处理的key
String key = keys.nextElement(); //唯一表示
String value = bundle.getString(key); //全限定类名
try {
Class clazz = Class.forName(value);
Object obj = clazz.newInstance();//创建的实现类对象
map.put(key, obj);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* className : 全限定类名的唯一表示(id)
* map中的key值
*/
public static Object getBean(String className) throws Exception {
return map.get(className);
}
}