IOC(Inersion of Control)是Spring框架的基础,BeanFatory是IoC容器的核心借口,其职责是实例化、定位、配置应用程序中的对象与及建立这些对象之间的依赖。
ApplicationContext接口由BeanFactory派生而来,增强了BeanFactory的功能,提供更多的面向实际应用的方法。大多数情况下,使用ApplicatonContext作为Spring容器。下面模拟SpringIOC:
这是一个POJO类,Boy.java
package POJO; public class Boy { private Integer id; private String name; private Integer age; public Boy(){} //....省略getter跟setter }
接下来写一个xml文件,spring.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean id ="boy" class="POJO.Boy"> <property name="id" value="1"/> <property name="name" value="小男孩"/> <property name="age" value="11"/> </bean> </beans>
核心类:SpringIOC
public class SpringIOC { private String XMLPath; /** * @param XMLPath * 配置文件的路径 */ public SpringIOC(String XMLPath) { this.XMLPath = XMLPath; } public Object getBean(String beanId) throws Throwable { // 1.解析配置文件 Document doc = this.loadXML(); // 2.根据beanId定位到<bean>标签 Element beanElement = this.getBeanElement(doc, beanId); // 3.获取beanElement的class属性的值 String classPath = this.getClassPath(beanElement); // 4.通过class属性值利用反射技术构造bean实例 Object obj = this.createObject(classPath); // 5.使用beanUtils给对象设置 obj = this.setObeject(beanElement, obj); return obj; } /** * 加载xml配置文件 * * @return * @throws Throwable */ private Document loadXML() throws Throwable { return new SAXReader().read(new File(XMLPath)); } /** * 根据beanId定位到对应的bean标签 * * @param doc * @param beanId * @return Element */ private Element getBeanElement(Document doc, String beanId) { return (Element) doc.selectSingleNode("//bean[@id='" + beanId + "']"); } /** * 得到beanElement的class属性值 * * @param beanElement * @return */ private String getClassPath(Element beanElement) { return beanElement.attributeValue("class"); } /** * 通过class属性值利用反射技术构造bean实例 * * @param classPath * @return */ private Object createObject(String classPath) throws Throwable { return Class.forName(classPath).newInstance(); } /** * 使用工具类beanUtils给对象设值 * * @param obj * @return * @throws Throwable */ @SuppressWarnings("unchecked") private Object setObeject(Element beanElement, Object obj) throws Throwable { List<Element> list = beanElement.elements(); for (Element element : list) { String name = element.attributeValue("name"); String value = element.attributeValue("value"); BeanUtils.setProperty(obj, name, value); } return obj; } }
注意:这里用dom4j解析xml,并且使用BeanUtils给对象设置属性,需要导入相应的jar包
测试类 TestSpringIOC.java
public class TestSpringIOC { public static void main(String[] args) throws Throwable { SpringIOC ioc = new SpringIOC("src/spring.xml"); Boy boy = (Boy) ioc.getBean("boy"); System.out.println(boy); } }
输出为:Boy [id=1, name=小男孩, age=11],简单的模拟SpringIOC就到此结束了。
相关推荐
模拟Spring的IoC,我们可以创建一个简单的容器类,其中包含一个Map来存储bean。然后使用注解处理器扫描带有特定注解(如`@Component`)的类,并将它们注册到容器中。当需要注入依赖时,容器可以解析注解并自动装配。...
通过以上步骤,我们可以构建一个简单的IOC容器,模拟Spring的核心功能。这不仅有助于理解Spring的工作原理,也为我们自定义轻量级框架提供了可能。在实际开发中,了解并掌握Spring的IOC机制能够帮助我们更好地设计和...
这个"模拟spring ioc过程"的学习例子是基于Java语言的,旨在帮助理解Spring框架中的这两个核心概念。在Java工程中,我们通常会通过配置文件(如XML或Java配置类)来定义bean的定义和它们之间的依赖关系。在实际运行...
NULL 博文链接:https://zhengshuo.iteye.com/blog/573192
通过以上步骤,我们可以实现一个简单的Java模拟Spring IOC的系统。这种方式可以帮助开发者更好地理解Spring的工作原理,并在没有Spring框架的环境中实现相同的功能。不过,需要注意的是,Spring框架提供了更高级的...
这个练习分为三个主要部分,旨在帮助我们掌握XML配置文件的读取,模拟Spring的IoC机制,以及对Struts框架的简单模拟。下面将逐一解析这些知识点。 **1. XML读取** XML(Extensible Markup Language)是一种通用的...
标题 "动手写框架,模拟简易的Spring IOC" 暗示了这个压缩包包含了一个教程或实践项目,目的是帮助我们理解Spring框架的核心组件——控制反转(Inversion of Control,简称IOC)。Spring框架是Java开发中广泛使用的...
本教程将通过一个简单的模拟来帮助你快速理解Spring的IoC容器。 首先,我们要了解IoC的基本概念。IoC是指应用程序的控制流程由框架接管,而不是由应用程序本身控制。在传统编程中,对象会自行创建和查找依赖的对象...
本篇文章将详细解析“模拟Spring IOC技术”的核心概念,并通过一个小Demo帮助你深入理解IOC的工作原理。 首先,我们来解释一下什么是IOC和DI。控制反转(IOC)是编程中的一个设计原则,它改变了对象获取依赖的方式...
在这个项目中,“基于java简单模拟实现spring_ioc”显然是为了帮助开发者理解Spring的IoC容器是如何工作的,以及如何通过Java代码来模拟这个过程。 首先,让我们了解什么是Spring的IoC。IoC是一种设计模式,它将...
在本文中,我们将深入探讨“模拟Spring IOC”的概念,以及如何通过自己实现的简单依赖注入来理解这个核心的Spring框架特性。Spring IOC,即Inversion of Control(控制反转),是软件设计模式的一种,它在Spring框架...
模拟Spring的IOC功能,我们可以创建一个简单的解析器类,该类负责加载XML配置文件,解析Bean定义,实例化和注入依赖。为了实现这个功能,我们需要了解和使用Java的DOM或SAX解析库,以及反射API。这是一个很好的学习...
例如,`SpringIOC`目录中的配置文件(如`applicationContext.xml`)用于定义bean的定义和它们之间的依赖关系。通过XML或注解方式声明bean,Spring可以自动管理bean的实例化、初始化和销毁,从而简化了代码并提高了可...
在没有Spring的情况下,我们可以使用简单的工厂模式或反射机制来模拟IoC,用代理模式或动态代理(如Java的`java.lang.reflect.Proxy`)来模拟AOP。这通常涉及到创建一个容器(类似Spring的ApplicationContext),...
**Spring IoC简介** Spring框架的核心特性之一是Inversion of Control(IoC),也被称为依赖注入(Dependency Injection)。IoC是一种设计模式,它将对象之间的依赖关系从代码中解耦出来,转交给一个外部容器(在...
在模拟Spring IoC和AOP的过程中,我们可以创建简单的Java类作为服务提供者和服务消费者,并在Spring容器中注册这些类。然后,我们可以通过注解或者XML配置来实现依赖注入,观察容器如何管理这些对象的生命周期。 ...
- **测试友好**:依赖注入使得单元测试更加简单,只需提供模拟对象即可。 **二、Spring中的注解** 随着Java 5的发布,注解(Annotation)成为了一种强大的元数据形式。Spring框架充分利用了注解,简化了配置并...
通过这个简单的自定义IOC容器,我们可以理解Spring的IOC容器是如何工作的。Spring的容器更加复杂和强大,它支持XML配置、基于注解的配置,以及更复杂的依赖解析规则。此外,Spring还提供了AOP(面向切面编程)、事务...
在Spring中,工厂模式可以与IoC容器结合使用,例如在【springFactory】和【springFactoryJDOM】的示例中,我们可能会看到如何使用Spring的Bean工厂来创建和管理对象。Spring提供了XML配置和注解两种方式来声明和管理...
标题中的“Spring简单模拟Spring容器”意味着我们将探讨Spring框架的核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),以及如何通过编程方式模拟Spring容器的工作原理。...