自己实现spring容器创建
Posted liufei-yes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自己实现spring容器创建相关的知识,希望对你有一定的参考价值。
场景:对账户信息进行操作
步骤
- 首先,持久化层操作
public interface AccountDao {
void saveAccount();
}
新增一个账户信息,持久化层操作实现类
public class AccountDaoImpl implements AccountDao {
@Override
public void saveAccount() {
System.out.println("保存账户成功");
}
}
- 业务层操作
public interface AccountService {
void saveAccount();
}
业务层操作实现类
public class AccountServiceImpl implements AccountService {
private AccountDao accountDao = (AccountDao) BeanFactory.getBean("accountDao");
@Override
public void saveAccount() {
accountDao.saveAccount();
}
}
这里,我们通过自己定义对BeanFactory来创建bean
3. 创建配置文件
accountService=com.lf.test.service.impl.AccountServiceImpl
accountDao=com.lf.test.dao.impl.AccountDaoImpl
- BeanFactory实现
/**
*
* 一个创建Bean对象的工厂
*
* JavaBean:使用java编写的可重用组件
*
* 创建Service和Dao对象
*
* 第一步:需要配置文件来配置我们的service和dao
* * 配置内容:唯一标识 -> 全限定类名(key -> value)
*
* 第二步:读取配置文件中配置的内容,反射创建对象
*
* 配置文件可以是xml也可以是properties
*
*/
public class BeanFactory {
// 定义一个properties
private static Properties properties;
// 定义一个map,存放要创建的对象,称为容器
private static Map<String, Object> beans;
// 使用静态代码块为Properties对象赋值
static {
try {
// 实例化对象
properties = new Properties();
// 获取properties文件的流对象
InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
properties.load(in);
beans = new HashMap<>();
// 取出配置文件中所有的bean
Enumeration keys = properties.keys();
// 遍历keys
while (keys.hasMoreElements()) {
String key = keys.nextElement().toString();
String beanPath = properties.getProperty(key);
Object value = Class.forName(beanPath).newInstance();
beans.put(key, value);
}
} catch (Exception e) {
throw new ExceptionInInitializerError("初始化properties失败");
}
}
// 根据bean的名称,获取值
public static Object getBean(String beanName) {
return beans.get(beanName);
}
}
- 测试
public class TestClient {
public static void main(String[] args) {
AccountService accountService = (AccountService) BeanFactory.getBean("accountService");
accountService.saveAccount();
}
}
结果:
以上是关于自己实现spring容器创建的主要内容,如果未能解决你的问题,请参考以下文章