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/

最新文章

  1. 缓存依赖中cachedependency对象
  2. Dynamics AX 2012 R2 通过数据源保存记录时触发的方法
  3. Win10/UWP开发—使用Cortana语音与App后台Service交互
  4. NYOJ题目1049自增自减
  5. Spring 事务管理 01 ——
  6. webdriver如何定位多层iframe中元素
  7. 如何更新Android SDK和Build Tool
  8. xcode plugin
  9. CreateEvent的使用方法
  10. Python自动化运维之14、设计模式
  11. php单例模式在数据库连接中的使用
  12. 火炬之光模型导出(Unity载入火炬之光的模型)
  13. 一步步学习EF Core(1.DBFirst)
  14. Servlet和web服务器关系
  15. Three.js学习笔记01
  16. python线程中的全局变量与局部变量
  17. 转载 javascript中(function($){...})(jQuery)写法是什么意思
  18. 用Jersey构建RESTful服务1--HelloWorld
  19. 微信小程序 多个视频播放器
  20. Django中的View视图讲解

热门文章

  1. ENGG1310 Electricity and electronics P1.2 Electronic Communication
  2. cnpm 安装不上
  3. net Core做一个webApi的简单实例
  4. 解决Delphi报Range check error错误
  5. 《【转载】ChatGPT创始人,给我们上的8堂课》 回复
  6. Netbeans 16 的学习日志(购物车GUI)(建设中)
  7. GraalVM, Native Image, Java on Truffle, LLVM runtime, WebAssembly, JavaScript and Node.js关系是什么
  8. C++ 函数类型和函数指针类型的自动推导、声明和赋值
  9. AutoMapper在.Net Core WebApi中使用
  10. android studio 查看工程所有动画资源