`

模拟Spring原理

 
阅读更多

                                       模拟Spring原理

 

 

一、bean.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接口

 

package com.bjsxt.spring;

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

 

 

三、BeanFactory接口实现类ClassPathXmlApplicationContext

 

 

 

 

package com.bjsxt.spring;


import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

public class ClassPathXmlApplicationContext implements BeanFactory {
	
	private Map<String , Object> beans = new HashMap<String, Object>();
	
	
	//IOC Inverse of Control DI Dependency Injection
	public ClassPathXmlApplicationContext() throws Exception {
		SAXBuilder sb=new SAXBuilder();
	    
	    Document doc=sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml")); //构造文档对象
	    Element root=doc.getRootElement(); //获取根元素HD
	    List list=root.getChildren("bean");//取名字为disk的所有元素
	    for(int i=0;i<list.size();i++){
	       Element element=(Element)list.get(i);
	       String id=element.getAttributeValue("id");
	       String clazz=element.getAttributeValue("class");
	       Object o = Class.forName(clazz).newInstance();
	       System.out.println(id);
	       System.out.println(clazz);
	       beans.put(id, o);
	       
	       for(Element propertyElement : (List<Element>)element.getChildren("property")) {
	    	   String name = propertyElement.getAttributeValue("name"); //userDAO
	    	   String bean = propertyElement.getAttributeValue("bean"); //u
	    	   Object beanObject = beans.get(bean);//UserDAOImpl instance
	    	   
	    	   String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
	    	   System.out.println("method name = " + methodName);
	    	   
	    	   Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);
	    	   m.invoke(o, beanObject);
	       }
	       
	       
	    }  
	  
	}



	public Object getBean(String id) {
		return beans.get(id);
	}

}

 

 

四、UserService业务处理类 

 

package com.bjsxt.service;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;



public class UserService {
	private UserDAO userDAO;  
	public void add(User user) {
		userDAO.save(user);
	}
	public UserDAO getUserDAO() {
		return userDAO;
	}
	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}
}

 

  

五、测试模拟Spring原理

 

 

package com.bjsxt.service;
import org.junit.Test;

import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;
import com.bjsxt.spring.BeanFactory;
import com.bjsxt.spring.ClassPathXmlApplicationContext;


public class UserServiceTest {

	@Test
	public void testAdd() throws Exception {
		BeanFactory applicationContext = new ClassPathXmlApplicationContext();
		
		
		UserService service = (UserService)applicationContext.getBean("userService");
		
		
		
		
		
		User u = new User();
		u.setUsername("zhangsan");
		u.setPassword("zhangsan");
		service.add(u);
	}

}

 

分享到:
评论

相关推荐

    以注解方式模拟Spring IoC AOP

    本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 ### 1. 依赖注入(IoC) 依赖注入是Spring框架的核心特性之一,它通过反转对象创建和管理的控制权,使得应用程序组件之间的耦合...

    Spring简单模拟Spring容器

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

    spring原理模拟

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

    简单模拟spring框架原理

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

    模拟Spring的IOC

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

    java模拟spring ioc

    这篇博客“java模拟spring ioc”很可能是探讨如何在没有Spring框架的情况下,使用纯Java代码来实现类似Spring的IOC功能。以下将详细介绍Spring的IOC和DI概念以及如何模拟这些概念。 **依赖注入(Dependency ...

    自己动手模拟spring

    【标题】:“自己动手模拟spring” 【描述】:在该主题中,我们将深入理解Spring框架的核心概念,并通过编码实践来模拟其工作原理。参考链接提供了一个CSDN博客文章,作者详细介绍了如何从零开始创建一个简易版的...

    模拟spring

    通过模拟Spring的实现,我们可以更深入地了解Spring框架的运作机制,包括IoC容器的初始化、bean的生命周期管理、AOP的实现原理等。同时,动手实践能帮助我们更好地掌握这些概念,并将其应用于实际项目中。 总的来说...

    模拟Spring IoC

    在这个模拟Spring IoC的项目中,我们可以深入理解以下几个关键知识点: 1. **容器的概念**:Spring IoC容器是管理对象及其依赖关系的核心组件。在这个模拟项目中,会有一个类或接口扮演容器的角色,负责创建对象、...

    模拟spring和工具jar包

    本资源名为“模拟spring和工具jar包”,其目的是为了帮助我们理解Spring框架的核心概念——依赖注入,并通过一个简化版的实现来学习这一机制。 依赖注入是Spring框架的核心特性之一,它允许我们在不直接创建对象的...

    简单模拟spring cglib代理

    Spring框架是目前Java企业开发中最为流行...总结来说,通过模拟Spring的CGLIB代理,我们可以更深入地理解AOP的实现机制和代理模式的工作原理。这对于加深对Spring框架的理解以及开发高质量的Java应用都是非常有帮助的。

    尚学堂_Spring_0100_模拟Spring

    "模拟Spring"可能意味着我们将通过一个简化版或实例化的Spring核心功能来学习其工作原理。这种实践性的方法有助于我们更直观地理解Spring如何管理对象和处理依赖关系。 首先,Spring中的“AbstractOrientedProgram...

    简单模拟Spring的beanFactory

    本文将通过模拟Spring的`BeanFactory`来深入理解其工作原理,帮助开发者更好地掌握Spring的核心概念。 `BeanFactory`是Spring框架中最基础的bean管理容器,它是所有更高级别的容器(如`ApplicationContext`)的基类...

    模拟Spring架构的简易实现

    "模拟Spring架构的简易实现"这个项目可能是为了理解和学习Spring框架的基本原理而创建的,它可能通过简单的代码来模拟Spring的一些核心功能。 首先,我们要理解Spring的核心概念。依赖注入是Spring最基础的设计模式...

    模拟spring aop技术

    **模拟Spring AOP技术** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组件,它提供了一种在不修改源代码的情况下,通过代理模式来实现横切关注点(如日志、事务管理等)的...

    Spring原理模拟代码

    package com.ohc.spring; import java.lang.reflect.Method; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jdom.Document; import org.jdom.Element; import org.jdom....

    模拟 Spring 的实现

    模拟Spring并不是重新创建一个完整的Spring框架,而是为了学习和理解Spring的工作原理,通过编写简单的代码来实现IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)的核心...

    自己的代码模拟spring的依赖注入

    现在,我们将深入探讨如何通过自己的代码来模拟Spring的依赖注入。 首先,理解依赖注入的概念至关重要。依赖注入意味着组件不直接创建其依赖的对象,而是由外部实体(如Spring IoC容器)提供。这样做的好处是,我们...

    模拟spring的xml配置文件注入

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

    模拟spring实现包扫描器功能

    本文将深入探讨如何模拟Spring实现包扫描器功能,以便在不依赖Spring框架的情况下,扫描指定包下的所有类。 首先,我们需要理解Spring是如何进行包扫描的。在Spring中,这个过程由`org.springframework.context....

Global site tag (gtag.js) - Google Analytics