`
lochen514
  • 浏览: 10505 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

简单模拟spring di

阅读更多
spring di(即依赖注入)的原理个人理解是这样子的,先读取配置文件,在通过解析xml将有用的信息扣取出来,再通过反射机制来实现类或方法的实例化。
今天我模拟了两种注入方式一种是注入bean,另一种是注入一个factory.对于工厂模式本人觉得还蛮好用的,只要搭建起了架构感觉管理起来挺容易的。还有bridge模式在开发中也是很便于管理的。所以我在这个小例子里面结合了bridge和factory模式。

下面是代码:
1,UserDao:接口
public interface UserDao {

	public boolean add();
	
}



2,ImplUserDaoMySql:实现UserDao接口的MySql数据库dao层
public class ImplUserDaoMySql implements UserDao {

	@Override
	public boolean add() {
		System.out.println("add MySql Dao!");
		return true;
	}

}


3,ImplUserDaoOracle:实现UserDao接口的Oracle数据库dao层
public class ImplUserDaoOracle implements UserDao {

	@Override
	public boolean add() {
		System.out.println("add Oracle Dao!");
		return true;
	}

}


上面两个就可以体现出桥模式的优点

4,DaoFactory:工厂模式类用于生产各种UserDao
public class DaoFactory {

	public static UserDao getUserDaoOracle(){
		return new ImplUserDaoOracle();
	}
	
	public static UserDao getUserDaoMySql(){
		return new ImplUserDaoMySql();
	}
}


5,AnalogApplicationContext:模拟di主程序
public class AnalogApplicationContext {
	private Map<String, Object> map = new HashMap<String, Object>();

	public AnalogApplicationContext(String configLocation) {
		// 解析配置文件,将信息放入map中
		SAXReader sax = new SAXReader();

		try {
			Document document = sax.read(AnalogApplicationContext.class
					.getResourceAsStream(configLocation));
			Element root = document.getRootElement();
			List<Element> elements = root.elements();
			for (int i = 0; i < elements.size(); i++) {
				Element element = elements.get(i);
				String idDI = element.attribute("id").getData().toString();
				String classDI = element.attribute("class").getData()
						.toString();
				String factoryMethodDI = "";
				if (element.attribute("factory-method") == null) {
					map.put(idDI, Class.forName(classDI).newInstance());
				} else {
					factoryMethodDI = element.attribute("factory-method")
							.getData().toString();
					Object obj = Class.forName(classDI).newInstance()
							.getClass().getDeclaredMethod(factoryMethodDI)
							.invoke(Class.forName(classDI).newInstance());
					map.put(idDI, obj);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

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


6,applicationContext-di.xml:spring模拟配置文件,注意本模拟程序中applicationContext-di.xml必须和AnalogApplicationContext.java主模拟程序放在同一目录下,应为我获取applicationContext-di.xml文件路径是先通过AnalogApplicationContext.java来获取,当然这个也是可变的,自由发挥喽。
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
	
	<bean id="userDaoOracle" class="com.fairy.spring.di.impldao.ImplUserDaoOracle" />	
	<bean id="userDaoMySql" class="com.fairy.spring.di.daofactory.DaoFactory" factory-method="getUserDaoMySql" />
	
</beans>


7,TestDI:测试类,用来测试两种注入方式
public class TestDI {

	/**
	 * @测试模拟spring DI程序
	 */
	public static void main(String[] args) {
		/**
		 * 测试bean注入模式
		 */
		AnalogApplicationContext alAcOracle = new AnalogApplicationContext("applicationContext-di.xml");
		UserDao userdaoOracle = (UserDao)alAcOracle.getBean("userDaoOracle");
		userdaoOracle.add();
		/**
		 * 测试factory注入模式
		 */
		AnalogApplicationContext alAcMySql = new AnalogApplicationContext("applicationContext-di.xml");
		UserDao userdaoMySql = (UserDao)alAcMySql.getBean("userDaoMySql");
		userdaoMySql.add();
	}

}

分享到:
评论

相关推荐

    Spring简单模拟Spring容器

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

    Java模拟spring实现

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

    java模拟spring ioc

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

    模拟Spring的IOC

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

    自己动手模拟spring

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

    简单模拟Spring的beanFactory

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

    模拟spring

    《模拟Spring:深入理解与实践》 在软件开发领域,Spring框架无疑是最为广泛使用的Java企业级应用框架之一。它以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)...

    模拟Spring IoC

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

    模拟spring和工具jar包

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

    模拟Spring架构的简易实现

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

    java 解析xml,模拟spring框架ioc

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

    使用反射和注解模拟Spring的依赖注入

    模拟Spring的依赖注入,我们可以创建一个简单的容器类,它使用反射来扫描带有特定注解的类,并根据这些注解管理bean。以下步骤概括了这个过程: 1. **定义注解**:创建自定义注解,如`@MyComponent`,用于标记需要...

    尚学堂_Spring_0100_模拟Spring

    总的来说,《尚学堂_Spring_0100_模拟Spring》的学习资源将涵盖Spring的基本概念、核心组件、DI和AOP的应用,以及相关的开发工具使用。通过深入学习和实践,我们将能够熟练掌握Spring框架,并能有效地应用于实际项目...

    简单模拟springIoc容器

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

    模拟Spring的依赖注入

    本篇文章将深入探讨如何通过Java代码来模拟Spring的依赖注入机制。 **依赖注入的概念** 依赖注入是一种设计模式,它允许对象在运行时获取其依赖项,而不是在构造函数或初始化方法中硬编码这些依赖项。这样做的好处...

    基于java简单模拟实现spring_ioc

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

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

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

    模拟spring ioc技术

    这个例子展示了如何模拟Spring的IOC和DI。虽然实际的Spring框架提供了更强大和复杂的功能,如自动扫描、AOP(面向切面编程)、事务管理等,但这个简单的模拟可以帮助我们理解核心理念。通过这个小Demo,你应该能更好...

    模拟 Spring 的实现

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

    模拟spring依赖注入

    模拟Spring的依赖注入,旨在理解其核心机制,让我们一起深入探讨这一主题。 首先,我们要明白什么是依赖注入。在传统的编程中,一个对象通常会直接创建或查找它所依赖的对象,这会导致类之间的紧密耦合。依赖注入则...

Global site tag (gtag.js) - Google Analytics