`
iluoxuan
  • 浏览: 580345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自己写IOC-----第一篇

    博客分类:
  • java
 
阅读更多

IOC框架如果多,IOC用的如此多,真的懂的原理吗?


1:根据使用SPRING IOC 的经验  

 

    加载配置文件--------------解析beans.xm--------保存在map中---------反射生成对象;

 

配置文件如下:

 

            <?xml version="1.0" encoding="UTF-8"?>

<beans>
    <bean  id="person" class="com.domain.Person">
    </bean>
    <bean id="loginServce" class="com.servce.LoginServce">
          <prooety name="person" ref="person"></prooety>
    </bean>
</beans>

 

xml操作使用jdom操作;前面有介绍

 

 

package com.jdom.xml;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

public class IOCdomXml {
	private static IOCdomXml install = null;

	private IOCdomXml() {

	}

	public synchronized static IOCdomXml getInstall() {
		if (install == null) {
			install = new IOCdomXml();
		}
		return install;
	}

	/**
	 * map<id,Element>保存讀取出來的bean的id和对应的Element节点
	 */
	public Map<String, Element> getBeanElement(String xmlPath) {
		Element root = getRootElement(xmlPath);
		// 得到所有的bean节点
		List<Element> beanlist = root.getChildren("bean");
		Map<String, Element> elmentMap = new HashMap<String, Element>();
		for (Element bean : beanlist) {
			// 得到所有bean节点对象应的id
			String id = bean.getAttributeValue("id");
			elmentMap.put(id, bean);
		}

		return elmentMap;
	}

	/**
	 * map<String,map<String,Element>>保存每个bean中所依赖的对象节点
	 */
	public Map<String, Map<String, Element>> getRefBeanElements(String xmlPath) {
		Map<String, Element> beanMap = getBeanElement(xmlPath);
		Map<String, Map<String, Element>> refMap = new HashMap<String, Map<String, Element>>();
		Map<String, Element> propetyMap = new HashMap<String, Element>();
		for (Map.Entry<String, Element> entry : beanMap.entrySet()) {
			String beanID = entry.getKey();

			Element bean = entry.getValue();
			List<Element> propetylist = bean.getChildren();
			if (propetylist.size() > 0) {
				for (Element propety : propetylist) {
					String propertyID = propety.getAttributeValue("name");
					propetyMap.put(propertyID, propety);
					refMap.put(beanID, propetyMap);
					System.out.println("propety------- " + propety.getName());
				}
			}
		}

		return refMap;
	}

	public Element getRootElement(String xmlPath) {
		SAXBuilder sax = new SAXBuilder();
		Document doc = null;
		try {
			doc = sax.build(IOCdomXml.class.getClassLoader().getResource(
					xmlPath));
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return doc.getRootElement();
	}
}
 

 

测试xml读取的如下:

 

 

package com.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.jdom2.Element;
import org.junit.Test;

import com.jdom.xml.IOCdomXml;

public class TestXml {
	@Test
	public void TestgetElementMap() {
		Map<String, Element> beanMap = IOCdomXml.getInstall().getBeanElement(
				"beans.xml");
		System.out.println(beanMap.size());
		for (Map.Entry<String, Element> entry : beanMap.entrySet()) {
			System.out.println("id---" + entry.getKey() + "    class----"
					+ entry.getValue().getAttributeValue("class"));
		}
	}

	@Test
	public void TestGetRefElements() {
		Map<String, Map<String, Element>> refMap = IOCdomXml.getInstall()
				.getRefBeanElements("beans.xml");
		System.out.println(refMap.size());
		Map<String, Element> propertyMap = new HashMap<String, Element>();
		for (Map.Entry<String, Map<String, Element>> entry : refMap.entrySet()) {
			String beanID = entry.getKey();
			propertyMap = entry.getValue();
			System.out.println("property---" + propertyMap.size());
			for (Map.Entry<String, Element> pentry : propertyMap.entrySet()) {
				System.out.println("id---" + pentry.getKey() + "    class----"
						+ pentry.getValue().getAttributeValue("ref"));
			}
		}

	}

}
 

 

 

分享到:
评论

相关推荐

    【框架源码篇 01】Spring源码-手写IOC

    在本系列的第一篇【框架源码篇 01】中,我们将深入探讨Spring框架的核心组件——控制反转(Inversion of Control,简称IOC)。IOC是一种设计模式,它将对象的创建和管理职责从应用代码中解耦出来,转交给一个外部...

    autofac+mvc5+三层-ioc

    **Mvc5** 是ASP.NET MVC框架的第五个版本,是一个用于构建动态、数据驱动的Web应用程序的模型-视图-控制器(Model-View-Controller, MVC)框架。MVC5提供了更好的性能、更丰富的功能以及对现代Web技术(如HTML5、CSS...

    第6章 充分利用Spring2的IOC利器统管Bean世界----大型门户网站是这样炼成的

    针对读者的不同学习阶段,共分技术篇、实践篇与部署篇三大部分进行循序渐进地讲解。 本书为高性能Java EE应用开发人员提供一整套实用的主流开发技术,融入了作者多年的高性能Java EE应用开发经验。

    我的IOC(一)

    标题 "我的IOC(一)" 暗示了这是一个关于控制反转(Inversion of Control,简称IOC)的系列文章的第一部分。IOC是软件设计模式中的一种,尤其在Java和.NET等面向对象编程语言中广泛使用,它将对象的创建和组装过程...

    透透彻彻IoC(你没有理由不懂!) - stamen的程序员之路 - ITeye技术网站1

    )】这篇文章深入浅出地解释了IoC(控制反转)这一核心的编程概念,特别是在Spring框架中的应用。IoC是Spring容器的基础,它支持AOP(面向切面编程)和声明式事务处理等功能。然而,IoC的概念往往难以直观理解,因为...

    《partner4java 讲述Spring入门》之第一步:Spring概述与Spring IoC

    《Spring入门:Spring概述与Spring IoC》是针对初学者的一篇教程,旨在引导开发者进入Spring框架的世界。本文将深入探讨Spring的核心概念,特别是Spring的Inversion of Control(IoC,控制反转)特性,以及如何在...

    JAVA spring 系列案例50个和学习资料

    Spring系列第1篇:为何要学spring?Spring系列第2篇:控制反转(IoC)与依赖注入(DI)。Spring系列第3篇:Spring容器基本使用及原理。Spring系列第4篇:xml中bean定义详解(-)Spring系列第5篇:创建bean实例这些方式...

    Spring框架文档 - 核心技术部分 中文版 - 第一部分.pdf

    Spring框架是Java开发中最常用的轻量级框架之一,它的核心技术主要围绕着控制反转(Inversion of Control,IoC)容器和面向切面编程(Aspect-Oriented Programming,AOP)展开。本篇文档将深入探讨这些核心概念以及...

    2023最新版Java学习路线图-第6阶段大厂面试专题

    ### 2023最新版Java学习路线图-第6阶段大厂面试专题 #### Java学习路线概述 本文档提供了一份详细的2023年Java学习路径,旨在帮助那些希望在IT行业,尤其是大型互联网公司中寻找工作的Java开发者们更好地准备面试...

    C#实现IOC代码,供学习用

    本篇我们将聚焦于C#实现的IOC(Inversion of Control,控制反转),即DI的一种形式,主要讲解如何自定义实现一个简单的IOC容器。 标题中提到的“C#实现IOC代码”通常指的是开发者为了理解和掌握DI原理,自己编写了...

    高级软件人才培训专家-day14-SpringBoot原理篇

    ### 高级软件人才培训专家-day14-SpringBoot原理篇 #### 一、配置优先级 在前几日的学习中,我们已经掌握了如何利用Spring Boot进行Web开发的基础技术,并了解了面向应用层面的开发方法。现在我们将进一步深入探讨...

    java web技术开发大全(最全最新)

    第1篇 web开发基础篇 第1章 搭建开发环境 1.1 本书使用的软件和框架的版本 1.2 JDK6的下载与安装 1.3 Eclipse3.4 的下载与安装 1.4 MyEclipse6.5 的下载与安装 1.5 Eclipse:IDEforJavaEEDevelopers的下载与...

    SSM框架的学习与应用-Java EE企业级应用开发学习记录-(第六天)初识Spring框架

    本资源是一篇关于学习和应用SSM框架(Spring、SpringMVC、MyBatis)的学习记录系列文章中的第六天内容,主题为初识Spring框架。 在这一部分中,你将了解到Spring框架的基本概念和使用方法,并通过实例探讨了Spring ...

    java web开发技术大全

    第1篇 web开发基础篇 第1章 搭建开发环境 1.1 本书使用的软件和框架的版本 1.2 JDK6的下载与安装 1.3 Eclipse3.4 的下载与安装 1.4 MyEclipse6.5 的下载与安装 1.5 Eclipse:IDEforJavaEEDevelopers的...

    [教學 - 入門篇] WebWork 2

    【教学 - 入门篇】WebWork 2 是一篇针对初学者介绍WebWork框架的教程。WebWork是一个基于Java的Model-View-Controller (MVC) 框架,它提供了一系列强大的特性来帮助开发者构建高效、可维护的Web应用程序。 ### 主要...

    Java使用IOC控制反转的三种设计模式详解

    第一个设计模式:依赖注入(DI) 依赖注入是 IOC 的一种常见形式,它是指在类之间的依赖关系不是通过硬编码,而是通过外部注入的方式来实现的。依赖注入的优点是可以降低类之间的耦合度,提高系统的灵活性和可维护...

    springboot 3.0.2 自动配置(auto-configuration) 启动器(starter)保姆级教程带源码

    本篇保姆级教程将带你深入理解这两个概念,结合源码分析,帮助你快速上手。 **自动配置(Auto-configuration)** 自动配置是Spring Boot的一大亮点,它基于条件注解(Conditional Annotations)来自动配置你的应用...

    Android中自定义实现IoC(控件注入、布局注入、事件注入)

    本篇文章将深入探讨如何在Android环境中自定义实现IoC,包括控件注入、布局注入和事件注入。 首先,我们来理解一下什么是控件注入。在传统的Android开发中,我们通常在Activity或Fragment中手动初始化UI控件,如...

Global site tag (gtag.js) - Google Analytics