1. 准备一个配置文件
applicationContext.properties
userService = com.baizhiedu.basic.UserServiceImpl
2.通过properties获取配置文件的内容
private static Properties properties= new Properties();
static{
try {
//第一步 获得IO输入流
/**
方法一:getResourceAsStream
InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");
*/
//方法二:getClassLoader
ClassLoader classLoader = BeanFactory.class.getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("applicationContext1.properties");
//第二步 文件内容 封装 Properties集合中 key = userService value = com.baizhixx.UserServiceImpl
env.load(inputStream);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
3. 通用的创建对象的方法
/*
key 小配置文件中的key [userDAO,userService]
*/
public static Object getBean(String key){
Object ret = null;
try {
Class clazz = Class.forName(properties.getProperty(key));
ret = clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
完整代码:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class BeanFactory {
private static Properties env = new Properties();
static{
try {
//第一步 获得IO输入流
InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");
//第二步 文件内容 封装 Properties集合中 key = userService value = com.baizhixx.UserServiceImpl
env.load(inputStream);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
key 小配置文件中的key [userDAO,userService]
*/
public static Object getBean(String key){
Object ret = null;
try {
Class clazz = Class.forName(env.getProperty(key));
ret = clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
}
4.测试
/**
* 用于测试:工厂类进行解耦合的操作
*/
@Test
public void test1() {
UserService userService = (UserService) BeanFactory.getBean("userService");
//提前定义好的service方法
userService.login("name", "zhangsan");
User user = new User("zhangsan", "123456");
userService.register(user);
}
测试结果:
如果后续需要创建其他对象,直接修改配置文件即可。