`
jinkingmanager
  • 浏览: 39035 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

模拟Spring的读取xml文件及注入

    博客分类:
  • SSH
阅读更多
简单的xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<bean id="userDAO" class="com.king.dao.impl.UserDAOImpl"></bean>
	
	<bean id="userService" class="com.king.service.impl.UserServiceImpl">
		<property name="userDAO" ref="userDAO"></property>
	</bean>
</beans>

BeanFactory接口
public interface BeanFactory
{
    public Object getBean(String name);
}

实现BeanFactory的接口
public class ClassPathXmlApplicationContext implements BeanFactory{
	private Map<String,Object> beans = new HashMap<String,Object>(); // map for store beans
	
         /***constructor****/
	public ClassPathXmlApplicationContext() 
	{
		SAXBuilder sb = new SAXBuider();
		Document doc = sb.builder(this.getClass().getClassLoader().getResourceAsStream("beans.xml"));//read the xml file in classpath
		Element root = doc.getRootElement(); // beans
		List list = root.getChildren("bean"); // all beans in that list
		
		int size = list.size();
		
		for(int i = 0; i< size; i++)
		{
			Element element = list.get(i);
			
			String id = element.getAttributeValue("id"); // get id
			String clazz = element.getAttributeValue("class"); // get class
			
			Object o = Class.forName(clazz).newInstance(); // reflect 
			beans.put(id,o); // put into the map
			
			List<Element> properties = (List<Element>) element.getChildren("property"); // get property config,for DI
			
			for(Element property : properties)
			{
				String name = property.getAttributeValue("name"); // get name
				String ref = property.getAttributeValue("ref"); // get reference bean name
				
				Object refBean = beans.get(ref); // get reference bean form map
				
				String methodName = "set" + name.subString(0,1).toUpperCase() + name.subString(1); // setter method name
				System.out.println(methodName);
				
				Method m = o.getClass().getMethod(methodName,refBean.getClass.getInterfaces()[0]); // get method parameters 
				m.invoke(o,refBean); // execute to inject reference bean 
			}
		}
	}
	
	public Object getBean(String name)
	{
		return beans.get(name);
	}


调用测试:
public SpringTest{
  
    @Test
    public void testAdd()
    {
        BeanFactory factory = new ClassPathXmlApplicationContext();
        UserService service = (UserService) factory.getBean("userService");

        User u = new User();
        service.add(u);
    }
}
分享到:
评论

相关推荐

    模拟spring的xml配置文件注入

    本文将深入探讨如何模拟Spring的XML配置文件注入,并通过SAXBuilder解析XML文件来实现这一过程。 首先,理解XML配置文件在Spring中的作用至关重要。XML配置文件用于声明应用程序中的bean及其依赖关系,例如类的实例...

    java 解析xml,模拟spring框架ioc

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

    Spring简单模拟Spring容器

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

    模拟Spring的IOC

    **模拟Spring的IOC** 在Java世界中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IOC)能力,成为企业级应用开发的首选框架之一。理解并模拟Spring的IOC...

    模拟spring ioc过程

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

    模拟spring中的ClassPathXmlApplicationContext类的实现

    3. **解析XML**:一旦获取到XML文件,Spring使用`DocumentBuilder`解析XML文档,将其转换为DOM(Document Object Model)结构。DOM是一个树形结构,表示XML文档的所有元素和属性。 4. **Bean定义**:解析XML的过程...

    尚学堂_Spring_0100_模拟Spring

    《尚学堂_Spring_0100_模拟Spring》 在深入探讨Spring框架之前,我们需要先理解Spring的核心理念。Spring是一个开源的Java平台,它主要为构建企业级应用提供了全面的编程和配置模型。它的核心特性是依赖注入...

    反射模拟springIOC.rar

    在这个例子中,我们使用了JDOM库来解析XML文件,JDOM是一个用于处理XML文档的API,提供了构建、修改和操作XML文档的功能。 下面我们将详细阐述Spring IOC的实现步骤: 1. **配置文件解析**:在`springIOC_0602`...

    spring参考文档及SpringSecurity参考文档

    Spring框架是Java开发中最广泛应用的轻量级框架之一,它以IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)为核心,极大地简化了企业级应用的开发流程。Spring Security则是在Spring...

    模拟spring工厂模式底层实现。

    1. **配置解析**:Spring会读取配置文件(如XML、Java配置或注解),解析出Bean的定义信息(BeanDefinition)。 2. **预处理**:对于带有@PostConstruct注解的方法,Spring会在实例化Bean后但在调用任何依赖注入...

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

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

    简单模拟springIoc容器

    在`YQIoc`这个压缩包中,可能包含了实现简单模拟Spring IoC容器的代码。通常,这个模拟会包含以下几个部分: 1. **Bean定义**:这是描述对象如何创建和配置的数据结构。在我们的例子中,bean定义可能是以XML形式...

    spring 控制反转的模拟程序

    4. **模拟实现**:为了模拟Spring的IoC,你可能需要编写一个简单的容器类,该类负责读取配置信息(如Java配置类或XML文件),然后根据配置创建和组装Bean。这可以通过反射API来实现,例如,使用`Class.forName`加载...

    Spring.Net依赖注入例子

    1. **XML配置**:Spring.NET的配置文件通常命名为`App.config`或`Web.config`,在这里,我们可以定义bean(即.NET对象)及其依赖关系。例如,如果有一个`CalculatorService`类依赖于`ICalculator`接口,我们可以在...

    利用spring实现打印机

    接下来,我们将利用Spring的XML配置文件来声明`LaserPrinter`为`Printer`接口的实现,并注入到需要使用打印机的类中。在`beans.xml`配置文件中,我们这样定义: ```xml ``` 然后,假设我们有一个`DocumentService...

    模拟Spring的IoC容器实现注解自动装配

    - **初始化**:加载bean定义,这可能涉及读取XML配置文件、Java配置类或扫描指定的包寻找带有特定注解的类。 - **bean创建**:根据bean定义创建bean实例,处理工厂方法、构造器等。 - **依赖注入**:在bean实例化后...

    spring原理模拟

    Spring框架是Java开发中不可或...通过模拟Spring的实现原理,我们可以更好地理解和使用这个强大的框架。在实际开发中,可以根据项目需求选择合适的配置方式,充分利用Spring提供的功能,打造高效、可维护的企业级应用。

    spring框架文档(英文版)

    IoC容器通过读取配置元数据(如XML或注解)来创建和管理对象,同时处理对象间的依赖关系。此外,容器还支持AOP(面向切面编程),这是Spring的另一大特色,用于实现如日志、事务管理等跨切面的关注点。 Spring框架...

    spring框架案例学习文档笔记.docx

    通过编写简单的类和接口,我们可以模拟Spring如何管理对象的生命周期和依赖关系,这有助于理解Spring的工作原理。 第四课详细介绍了如何搭建Spring的运行环境。这包括创建一个新的项目,配置Spring的环境,如添加...

    spring框架案例学习文档笔记.doc

    JDOM是Java处理XML文档的一种库,它提供了对XML文档创建、读取和修改的能力。在Spring框架中,XML配置文件是声明式配置的主要方式,因此理解JDOM的基本操作对于理解和解析Spring的配置文件至关重要。JDOM允许开发者...

Global site tag (gtag.js) - Google Analytics