`
Lee_Xq_
  • 浏览: 2214 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

模拟简单的SpringIOC

阅读更多

       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就到此结束了。

   

0
1
分享到:
评论

相关推荐

    以注解方式模拟Spring IoC AOP

    模拟Spring的IoC,我们可以创建一个简单的容器类,其中包含一个Map来存储bean。然后使用注解处理器扫描带有特定注解(如`@Component`)的类,并将它们注册到容器中。当需要注入依赖时,容器可以解析注解并自动装配。...

    模拟Spring的IOC

    通过以上步骤,我们可以构建一个简单的IOC容器,模拟Spring的核心功能。这不仅有助于理解Spring的工作原理,也为我们自定义轻量级框架提供了可能。在实际开发中,了解并掌握Spring的IOC机制能够帮助我们更好地设计和...

    模拟spring ioc过程

    这个"模拟spring ioc过程"的学习例子是基于Java语言的,旨在帮助理解Spring框架中的这两个核心概念。在Java工程中,我们通常会通过配置文件(如XML或Java配置类)来定义bean的定义和它们之间的依赖关系。在实际运行...

    spring IOC 简易实现

    NULL 博文链接:https://zhengshuo.iteye.com/blog/573192

    java模拟spring ioc

    通过以上步骤,我们可以实现一个简单的Java模拟Spring IOC的系统。这种方式可以帮助开发者更好地理解Spring的工作原理,并在没有Spring框架的环境中实现相同的功能。不过,需要注意的是,Spring框架提供了更高级的...

    java练习之模拟SPRING IOC,我的SUMMER

    这个练习分为三个主要部分,旨在帮助我们掌握XML配置文件的读取,模拟Spring的IoC机制,以及对Struts框架的简单模拟。下面将逐一解析这些知识点。 **1. XML读取** XML(Extensible Markup Language)是一种通用的...

    动手写框架,模拟简易的SpringIOC.rar

    标题 "动手写框架,模拟简易的Spring IOC" 暗示了这个压缩包包含了一个教程或实践项目,目的是帮助我们理解Spring框架的核心组件——控制反转(Inversion of Control,简称IOC)。Spring框架是Java开发中广泛使用的...

    简单模拟springIoc容器

    本教程将通过一个简单的模拟来帮助你快速理解Spring的IoC容器。 首先,我们要了解IoC的基本概念。IoC是指应用程序的控制流程由框架接管,而不是由应用程序本身控制。在传统编程中,对象会自行创建和查找依赖的对象...

    模拟spring ioc技术

    本篇文章将详细解析“模拟Spring IOC技术”的核心概念,并通过一个小Demo帮助你深入理解IOC的工作原理。 首先,我们来解释一下什么是IOC和DI。控制反转(IOC)是编程中的一个设计原则,它改变了对象获取依赖的方式...

    基于java简单模拟实现spring_ioc

    在这个项目中,“基于java简单模拟实现spring_ioc”显然是为了帮助开发者理解Spring的IoC容器是如何工作的,以及如何通过Java代码来模拟这个过程。 首先,让我们了解什么是Spring的IoC。IoC是一种设计模式,它将...

    模拟springIOC

    在本文中,我们将深入探讨“模拟Spring IOC”的概念,以及如何通过自己实现的简单依赖注入来理解这个核心的Spring框架特性。Spring IOC,即Inversion of Control(控制反转),是软件设计模式的一种,它在Spring框架...

    java 解析xml,模拟spring框架ioc

    模拟Spring的IOC功能,我们可以创建一个简单的解析器类,该类负责加载XML配置文件,解析Bean定义,实例化和注入依赖。为了实现这个功能,我们需要了解和使用Java的DOM或SAX解析库,以及反射API。这是一个很好的学习...

    Spring IOC AOP MVC 简单例子

    例如,`SpringIOC`目录中的配置文件(如`applicationContext.xml`)用于定义bean的定义和它们之间的依赖关系。通过XML或注解方式声明bean,Spring可以自动管理bean的实例化、初始化和销毁,从而简化了代码并提高了可...

    以注解方式模拟Spring_IoC,AOP

    在没有Spring的情况下,我们可以使用简单的工厂模式或反射机制来模拟IoC,用代理模式或动态代理(如Java的`java.lang.reflect.Proxy`)来模拟AOP。这通常涉及到创建一个容器(类似Spring的ApplicationContext),...

    Spring IoC简单示例-XML配置-Maven构建

    **Spring IoC简介** Spring框架的核心特性之一是Inversion of Control(IoC),也被称为依赖注入(Dependency Injection)。IoC是一种设计模式,它将对象之间的依赖关系从代码中解耦出来,转交给一个外部容器(在...

    spring IOC AOP simulation.rar

    在模拟Spring IoC和AOP的过程中,我们可以创建简单的Java类作为服务提供者和服务消费者,并在Spring容器中注册这些类。然后,我们可以通过注解或者XML配置来实现依赖注入,观察容器如何管理这些对象的生命周期。 ...

    SpringIOC文档.zip

    - **测试友好**:依赖注入使得单元测试更加简单,只需提供模拟对象即可。 **二、Spring中的注解** 随着Java 5的发布,注解(Annotation)成为了一种强大的元数据形式。Spring框架充分利用了注解,简化了配置并...

    自定义ioc容器,spring ioc容易模拟程序

    通过这个简单的自定义IOC容器,我们可以理解Spring的IOC容器是如何工作的。Spring的容器更加复杂和强大,它支持XML配置、基于注解的配置,以及更复杂的依赖解析规则。此外,Spring还提供了AOP(面向切面编程)、事务...

    工厂模式的测试并有spring ioc的简单实现

    在Spring中,工厂模式可以与IoC容器结合使用,例如在【springFactory】和【springFactoryJDOM】的示例中,我们可能会看到如何使用Spring的Bean工厂来创建和管理对象。Spring提供了XML配置和注解两种方式来声明和管理...

    Spring简单模拟Spring容器

    标题中的“Spring简单模拟Spring容器”意味着我们将探讨Spring框架的核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),以及如何通过编程方式模拟Spring容器的工作原理。...

Global site tag (gtag.js) - Google Analytics