手动实现IOC
2024-10-21 11:42:28
spring官方实现的ioc是通过反射和xml技术实现的,下面我们可以根据这个思路简单实现一下IOC,此处省略构建项目,项目的整体结构如图
第一步,在resources目录下创建beans.xml文件
<beans>
<bean id="userDao" class="com.grouphy.aop.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.grouphy.aop.service.impl.UserServiceImpl"></bean>
</beans>
第二步,创建BeanFactory工厂类,这个类的作用就是利用反射和xml技术实现对象的实例化,代码如下
public class BeanFactory {
private static Map<String,Object> mp = new HashMap<>(); static{ try {
// 1、读取配置文件
InputStream resourceAsStream = BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml");
// 2、解析xml
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(resourceAsStream);
// 3、编写xpath表达式
String xpath = "//bean";
// 4、获取所有签
List<Element> list = document.selectNodes(xpath);
// 5、遍历并创建对象实例,设置到map的bean标集合中
for (Element element : list) {
String id = element.attributeValue("id");
String className = element.attributeValue("class");
Object o = Class.forName(className).newInstance();
mp.put(id,o);
}
} catch (DocumentException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} } public static Object getBean(String userId){
return mp.get(userId);
}
}
第三步,编写测试类
public class UserTest { @Test
public void saveTest(){
IUserService userService = (IUserService) BeanFactory.getBean("userService");
userService.save(new User());
}
}
以上就是简单的ioc实现,
详细代码自行拉取:https://gitee.com/duy123456/spring/
最新文章
- 缓存依赖中cachedependency对象
- Dynamics AX 2012 R2 通过数据源保存记录时触发的方法
- Win10/UWP开发—使用Cortana语音与App后台Service交互
- NYOJ题目1049自增自减
- Spring 事务管理 01 ——
- webdriver如何定位多层iframe中元素
- 如何更新Android SDK和Build Tool
- xcode plugin
- CreateEvent的使用方法
- Python自动化运维之14、设计模式
- php单例模式在数据库连接中的使用
- 火炬之光模型导出(Unity载入火炬之光的模型)
- 一步步学习EF Core(1.DBFirst)
- Servlet和web服务器关系
- Three.js学习笔记01
- python线程中的全局变量与局部变量
- 转载 javascript中(function($){...})(jQuery)写法是什么意思
- 用Jersey构建RESTful服务1--HelloWorld
- 微信小程序 多个视频播放器
- Django中的View视图讲解
热门文章
- ENGG1310 Electricity and electronics P1.2 Electronic Communication
- cnpm 安装不上
- net Core做一个webApi的简单实例
- 解决Delphi报Range check error错误
- 《【转载】ChatGPT创始人,给我们上的8堂课》 回复
- Netbeans 16 的学习日志(购物车GUI)(建设中)
- GraalVM, Native Image, Java on Truffle, LLVM runtime, WebAssembly, JavaScript and Node.js关系是什么
- C++ 函数类型和函数指针类型的自动推导、声明和赋值
- AutoMapper在.Net Core WebApi中使用
- android studio 查看工程所有动画资源