`

模拟实现Spring框架

阅读更多

Spring框架主要就是使用反射机制实现IOC/DI。

applicationContext.xml

<beans>
	<bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl" />
	<bean id="userService" class="com.bjsxt.service.UserService" >
		<property name="userDAO" bean="u"/>
	</bean>
</beans>

BeanFactory.java

public interface BeanFactory {
	public Object getBean(String id);
}

ClassPathXmlApplicationContext.java

public class ClassPathXmlApplicationContext implements BeanFactory {
	
	private Map<String , Object> beans = new HashMap<String, Object>();
	
	public ClassPathXmlApplicationContext() throws Exception {
		SAXBuilder sb=new SAXBuilder();
	    Document doc=sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml"));                                       //构造文档对象
	    Element root=doc.getRootElement(); 	//获取根元素:beans
	    List list=root.getChildren("bean");	//获取名字为:bean 的所有元素
	    for(int i=0;i<list.size();i++){	   //对元素bean进行遍历
	       Element element=(Element)list.get(i);
	       String id=element.getAttributeValue("id");
	       String clazz=element.getAttributeValue("class");
	       Object o = Class.forName(clazz).newInstance();	//反射机制、对其进行实例化
	       beans.put(id, o);				//放入Spring容器中
	       List<Element> le = element.getChildren("property");
	       for(Element propertyElement : le) {
	    	   String name = propertyElement.getAttributeValue("name");
	    	   String bean = propertyElement.getAttributeValue("bean");
	    	   Object beanObject = beans.get(bean);		    //从容其中取出对象
	    	   String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);                                      //获取set方法名
	    	   Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);	
	    	   m.invoke(o, beanObject);		//执行此set方法
	       }
	    }  
	}
	
	public Object getBean(String id) {
		return beans.get(id);
	}
}

 简单Spring框架就完成了,下面就是如何使用了:

BeanFactory applicationContext = new ClassPathXmlApplicationContext();
UserService service = (UserService)applicationContext.getBean("userService");

 

分享到:
评论

相关推荐

    模拟实现spring IOC AOP的例子

    在本文中,我们将深入探讨如何模拟实现Spring框架中的两个核心特性:Inversion of Control(IoC,控制反转)和Aspect-Oriented Programming(AOP,面向切面编程)。这两个概念在现代Java应用开发中占据着重要的地位...

    手动实现的简单Spring框架

    【标题】手动实现的简单Spring框架 在Java Web开发领域,Spring框架是一个极其重要的存在,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)架构等。本项目是基于对Spring框架核心...

    以注解方式模拟Spring IoC AOP

    在Spring框架中,依赖注入(Inversion of Control, IoC)和面向切面编程(Aspect Oriented Programming, AOP)是两大核心特性。本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 #...

    基于java简单模拟实现spring_ioc

    在这个模拟实现中,可能会包含Spring框架的相关依赖,即使它们并未真正使用,因为我们的目标是模拟实现。 7. **`.classpath`和`.project`**:这两个文件是Eclipse IDE的工作空间配置,它们定义了项目的构建路径和...

    02-01-08-用30个类高仿真提炼纯手写Spring框架V2.0之MVC1

    【Spring 框架模拟构建】:本课程旨在深度解析并模拟实现Spring框架的核心部分,特别是Spring MVC,通过创建30个类来构建一个高度仿真的简易版Spring框架。这将帮助开发者深入理解Spring的系统架构和实现原理,以及...

    spring框架外文文献.docx

    具体来说,我们将探讨Spring框架如何帮助我们实现依赖注入,以及如何利用编程来提高效率。为了做到这一点,我们将探索控制反转(IoC)容器,即应用程序上下文。 在这里,我们只触及Spring框架的基本概念。如果你想...

    java 解析xml,模拟spring框架ioc

    本教程将深入探讨如何模拟Spring框架的IOC(Inversion of Control,控制反转)功能,特别关注XML配置文件的解析。 首先,我们需要理解什么是IOC。控制反转是一种设计原则,它将对象的创建和管理从对象本身剥离出来...

    自主实现的简易Spring框架

    这很可能是你的Spring框架实现的源代码或者编译后的类库。在这个目录下,可能包含了IoC容器和AOP的实现,比如: 1. 类扫描机制:用于发现和加载带有特定注解的类。 2. Bean定义:表示一个对象的配置信息,包括其类...

    android的spring框架

    在Android开发中,Spring框架可能并不像在Java服务器端那样被广泛熟知,但它确实为移动应用提供了一套强大的工具集。Spring for Android是Spring.io针对Android平台推出的一个框架,旨在帮助开发者构建高质量、可...

    Spring框架学习笔记

    Spring框架是Java开发中广泛应用的轻量级框架,它以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)为核心特性,极大地简化了企业级应用的开发工作。这份"Spring框架...

    Java模拟spring实现

    在本文中,我们将探讨如何通过Java来模拟Spring框架的基本功能。Spring是一个广泛应用的开源框架,它主要为Java应用程序提供依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP...

    简单模拟spring框架原理

    本篇将通过简单模拟Spring框架原理,帮助你深入理解这两个概念。 首先,我们要知道Spring是如何实现IoC的。IoC的核心思想是将对象的创建和管理权交给容器,而不是由对象自身负责。在Spring中,我们通过定义Bean ...

    spring框架电子书

    Spring框架是中国Java开发领域中最广泛使用的轻量级框架之一,它以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)的核心特性,极大地简化了企业级应用的开发。...

    模拟Spring的IOC

    要模拟Spring的IOC容器,我们需要实现以下几个核心功能: - **Bean定义(Bean Definition)**:存储对象的创建信息,如类名、属性值、依赖关系等。 - **Bean工厂(Bean Factory)**:负责读取Bean定义,并根据定义...

    自己动手写的类似spring框架

    标签“spring”表明整个项目与Spring框架紧密相关,因此,我们可以期待在这个框架中找到关于Spring IoC的一些基本实现,例如bean的定义、bean的扫描、依赖注入的处理以及可能的配置文件解析等功能。 压缩包子文件的...

    spring框架文档(英文版)

    Spring框架是中国IT开发者广泛使用的Java应用开发框架,它以其模块化、灵活性和强大的功能而闻名。这份"spring框架文档(英文版)"是Spring官方提供的详尽指南,旨在帮助开发者深入理解和有效地使用Spring框架。 ...

    Spring简单模拟Spring容器

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

    Java模拟的spring实现

    当我们谈论"Java模拟的spring实现"时,这意味着我们要通过纯Java代码来模拟Spring框架的一些关键特性。这有助于我们深入理解Spring的工作原理,并能在没有Spring环境的情况下进行教学、学习或测试。 首先,让我们来...

    spring框架\Spring 中文开发手册

    Spring框架还提供了强大的集成测试支持,包括Mockito、Junit、TestNG等工具的集成,使得开发者能够在单元测试和集成测试中轻松模拟复杂的依赖关系,确保代码的质量和稳定性。 ### 安全性 Spring Security是Spring...

Global site tag (gtag.js) - Google Analytics