java加载资源文件

加载资源文件注意地方
第一种方式读取资源文件
资源文件必须放在src目录下面或者src包里面

1.定义一个properties对象
private properties pros = new Properties();
static{
	try { 
	//推荐使用这种方式加载配置文件
	InputStream in = BeanFactory.class.getClassLoader().getReSourceAsStream("bean.properties");
	/**/绝对不能用,web工程一旦发布,就没有Src目录**
	 /**InputStream in = new FileInputStream("src/bean.properties");*/

	pros.load(in);
	} catch(Exception e){
		throw new ExceptionInInitializerError("加载配置文件失败"+e);
	}
}

public static void main(String[] args){
	System.out.println(pros.get("CUSTOMERDAO"));
}

第二种方式读取资源文件

更简单的一种方式加载properties资源文件
//1.他只能用于读取properties文件,别的读不了
  2.他只能用于读取,不能写入
  3.他只能读取类路径下,不在类路径下读取不了
注意:它的方法参数的写法是按照包名,类名的方式写的,所有请不要写扩展名
private static ResourceBundle hundle = ResourceBundle.getBuldle("bean");

//根据bean的名称创建类对象(工厂设计模式解耦)
//以前直接new 对象,强制关系太强
//控制权发生改变就叫控制反转,降低依赖关系(解耦)
public static Object getBean(String beanName){
try {
	1.读取配置文件,跟据beanName获取全限定类名
	String beanPath = bundle.getString(beanName);
	return Class.forName(beanPath).newInstance();
} catch (Exception e) {
	throw new RuntimeException(e);
	}	
}

线程安全问题(jvm里面有六个区域)
工厂设计模式每次创建的对象都是不同的实例
这里只讨论两个(堆和栈)
java加载资源文件_第1张图片
图示的堆里面service对象里面有一个customer变量
每次线程访问这个变量都指向不同的变量,如果第一个线程访问这个变量并且更改这个变量值之后,再来一个线程访问的就是更改之后的变量,存在线程不安全问题(把变量放在方法里面可以避免这种情况,每次访问这个都是不同的变量),我们不要在类里面定义类成员。

你可能感兴趣的:(java加载资源文件)