模拟spring中的ClassPathXmlApplicationContext的实现

深入理解Spring:模拟ClassPathXmlApplicationContext类的实现 在现代Java开发中,Spring框架已成为企业级应用开发的标准之一。Spring的核心概念是基于依赖注入(DI)和面向切面编程(AOP)的,通过提供了一个全面的编程和配置模型,使得开发者能够构建灵活、可维护且松耦合的应用程序。本章旨在为读者提供一个全面的Spring框架概览。我们将首先介绍Spring的历史背景、设计理念以及其主要组成部分。随后,我们将探讨Spring框架的不同模块,包括核心容器、数据访问/集成、Web框架、AOP等,以及它们是如何协同工作来支持构建健壮的企业级应用的。 阅读详情

最近,看spring,觉得spring的一些源码,很牛就来模仿下,模仿的目的不是为了炫耀啥,只是提高自己的编码质量。

要模仿ClassPathXmlApplicationContext类的实现,首先要读取spring中applicationContext.xml的内容,同时还要生成类的实例,自然用到的技术就有 dom4j的操作、再就是java 的反射机制、路径操作。

为了测试我在applicationContext.xml中添加了一个bean。

1、applicationContext.xml文件的内容如下:

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  5.  <bean id="person" class="com.cvicse.service.impl.PersonServiceImpl" />  
  6. </beans>  

 2、为了存取bean的信息,我们定义一个definebean的pojo类

Java代码 复制代码
  1. package com.cvicse.bean;   
  2.   
  3. /**  
  4.  *   
  5.  * @功能:存储bean的pojo类  
  6.  * @创建人 gao_jie  
  7.  * @创建日期 Jun 16, 2009  
  8.  * @版本 1.0  
  9.  *   
  10.  */  
  11. public class DefineBean {   
  12.   
  13.     private String id;   
  14.     private String className;   
  15.   
  16.     public DefineBean(String id, String className) {   
  17.         this.id = id;   
  18.         this.className = className;   
  19.     }   
  20.   
  21.     public String getId() {   
  22.         return id;   
  23.     }   
  24.   
  25.     public void setId(String id) {   
  26.         this.id = id;   
  27.     }   
  28.   
  29.     public String getClassName() {   
  30.         return className;   
  31.     }   
  32.   
  33.     public void setClassName(String className) {   
  34.         this.className = className;   
  35.     }   
  36. }  
package com.cvicse.bean;

/**
 * 
 * @功能:存储bean的pojo类
 * @创建人 gao_jie
 * @创建日期 Jun 16, 2009
 * @版本 1.0
 * 
 */
public class DefineBean {

	private String id;
	private String className;

	public DefineBean(String id, String className) {
		this.id = id;
		this.className = className;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}
}

 

3、实现ClassPathXmlApplicationContext类

Java代码 复制代码
  1. package com.cvicse.util;   
  2.   
  3. import java.net.URL;   
  4. import java.util.ArrayList;   
  5. import java.util.HashMap;   
  6. import java.util.List;   
  7. import java.util.Map;   
  8.   
  9. import org.dom4j.Document;   
  10. import org.dom4j.DocumentException;   
  11. import org.dom4j.Element;   
  12. import org.dom4j.XPath;   
  13. import org.dom4j.io.SAXReader;   
  14.   
  15. import com.cvicse.bean.DefineBean;   
  16.   
  17. /**  
  18.  *   
  19.  * @功能 ClassPathApplicationContext类  
  20.  * @创建人 gao_jie  
  21.  * @创建日期 Jun 16, 2009  
  22.  * @版本 1.0  
  23.  *   
  24.  */  
  25. public class ClassPathApplicationContext {   
  26.   
  27.     /**  
  28.      * 获取xml文件中的说有bean对应类  
  29.      */  
  30.     private List<DefineBean> beanslist = new ArrayList<DefineBean>();   
  31.   
  32.     /**  
  33.      * 存储各个实例的键值对  
  34.      */  
  35.     private Map<String, Object> sigletons = new HashMap<String, Object>();   
  36.   
  37.     /**  
  38.      * 构造函数  
  39.      *   
  40.      * @param fileName  
  41.      */  
  42.     public ClassPathApplicationContext(String fileName) {   
  43.         this.readXMLFile(fileName);   
  44.         this.instanceBeans();   
  45.     }   
  46.        
  47.     /**  
  48.      * 获取应用实例  
  49.      * @param beanid  
  50.      * @return  
  51.      */  
  52.     public Object getBean(String beanid){   
  53.         return sigletons.get(beanid);   
  54.     }   
  55.   
  56.     /**  
  57.      * 读取XMl文件  
  58.      *   
  59.      * @param fileName  
  60.      */  
  61.     @SuppressWarnings("unchecked")   
  62.     private void readXMLFile(String fileName) {   
  63.         // TODO Auto-generated method stub   
  64.         SAXReader reader = new SAXReader();   
  65.         Document document = null;   
  66.         try {   
  67.             <STRONG><SPAN style="COLOR: #ff0000">// 获取XML文件的路径   
  68.             URL xmlpath = this.getClass().getClassLoader()   
  69.                     .getResource(fileName);</SPAN></STRONG>   
  70.         <SPAN style="COLOR: #000080"><STRONG>   document = reader.read(xmlpath);   
  71.             Map<String, String> nsMap = new HashMap<String, String>();   
  72.             nsMap.put("ns", "http://www.springframework.org/schema/beans");// 加入命名空间   
  73.             XPath xsub = document.createXPath("//ns:beans/ns:bean");// 创建beans/bean查询路径   
  74.             xsub.setNamespaceURIs(nsMap);// 设置命名空间   
  75.             List<Element> beans = xsub.selectNodes(document);// 获取文档下所有bean节点   
  76.             for (Element element : beans) {   
  77.                 String id = element.attributeValue("id");   
  78.                 String className = element.attributeValue("class");   
  79.                 DefineBean bean = new DefineBean(id, className);   
  80.                 beanslist.add(bean);   
  81.             }</STRONG></SPAN>   
  82.         } catch (DocumentException e) {   
  83.             // TODO Auto-generated catch block   
  84.             e.printStackTrace();   
  85.         }   
  86.     }   
  87.   
  88.     /**  
  89.      * 实例化所有的bean  
  90.      */  
  91.     private void instanceBeans() {   
  92.         // TODO Auto-generated method stub   
  93.         for (DefineBean Bean : beanslist) {   
  94.   
  95.             if (Bean.getClassName() != null  
  96.                     && !"".endsWith(Bean.getClassName().trim())) {   
  97.                 // 采用java的反射机制进行类的实力化   
  98.                 try {   
  99.                     <SPAN style="COLOR: #ff0000"><STRONG>sigletons.put(Bean.getId(), Class.forName(   
  100.                             Bean.getClassName()).newInstance());</STRONG></SPAN>   
  101.                 } catch (InstantiationException e) {   
  102.                     // TODO Auto-generated catch block   
  103.                     e.printStackTrace();   
  104.                 } catch (IllegalAccessException e) {   
  105.                     // TODO Auto-generated catch block   
  106.                     e.printStackTrace();   
  107.                 } catch (ClassNotFoundException e) {   
  108.                     // TODO Auto-generated catch block   
  109.                     e.printStackTrace();   
  110.                 }   
  111.             }   
  112.         }   
  113.     }   
  114. }  
package com.cvicse.util;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

import com.cvicse.bean.DefineBean;

/**
 * 
 * @功能 ClassPathApplicationContext类
 * @创建人 gao_jie
 * @创建日期 Jun 16, 2009
 * @版本 1.0
 * 
 */
public class ClassPathApplicationContext {

	/**
	 * 获取xml文件中的说有bean对应类
	 */
	private List<DefineBean> beanslist = new ArrayList<DefineBean>();

	/**
	 * 存储各个实例的键值对
	 */
	private Map<String, Object> sigletons = new HashMap<String, Object>();

	/**
	 * 构造函数
	 * 
	 * @param fileName
	 */
	public ClassPathApplicationContext(String fileName) {
		this.readXMLFile(fileName);
		this.instanceBeans();
	}
	
	/**
	 * 获取应用实例
	 * @param beanid
	 * @return
	 */
	public Object getBean(String beanid){
		return sigletons.get(beanid);
	}

	/**
	 * 读取XMl文件
	 * 
	 * @param fileName
	 */
	@SuppressWarnings("unchecked")
	private void readXMLFile(String fileName) {
		// TODO Auto-generated method stub
		SAXReader reader = new SAXReader();
		Document document = null;
		try {
			// 获取XML文件的路径
			URL xmlpath = this.getClass().getClassLoader()
					.getResource(fileName);
			document = reader.read(xmlpath);
			Map<String, String> nsMap = new HashMap<String, String>();
			nsMap.put("ns", "http://www.springframework.org/schema/beans");// 加入命名空间
			XPath xsub = document.createXPath("//ns:beans/ns:bean");// 创建beans/bean查询路径
			xsub.setNamespaceURIs(nsMap);// 设置命名空间
			List<Element> beans = xsub.selectNodes(document);// 获取文档下所有bean节点
			for (Element element : beans) {
				String id = element.attributeValue("id");
				String className = element.attributeValue("class");
				DefineBean bean = new DefineBean(id, className);
				beanslist.add(bean);
			}
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 实例化所有的bean
	 */
	private void instanceBeans() {
		// TODO Auto-generated method stub
		for (DefineBean Bean : beanslist) {

			if (Bean.getClassName() != null
					&& !"".endsWith(Bean.getClassName().trim())) {
				// 采用java的反射机制进行类的实力化
				try {
					sigletons.put(Bean.getId(), Class.forName(
							Bean.getClassName()).newInstance());
				} catch (InstantiationException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

 

4、PersonServiceImpl及PersonService接口

Java代码 复制代码
  1. package com.cvicse.service.impl;   
  2.   
  3. import com.cvicse.service.PersonService;   
  4.   
  5. /**  
  6.  *   
  7.  * @功能 :测试类的实现    
  8.  * @创建人   gao_jie  
  9.  * @创建日期 Jun 16, 2009  
  10.  * @版本     1.0  
  11.  *   
  12.  */  
  13. public class PersonServiceImpl implements PersonService {   
  14.        
  15.     /* (non-Javadoc)  
  16.      * @see com.cvicse.service.impl.PersonService#save()  
  17.      */  
  18.     public void save(){   
  19.         System.out.println("我调用了Save方法!");   
  20.     }   
  21. }  
package com.cvicse.service.impl;

import com.cvicse.service.PersonService;

/**
 * 
 * @功能 :测试类的实现  
 * @创建人   gao_jie
 * @创建日期 Jun 16, 2009
 * @版本     1.0
 * 
 */
public class PersonServiceImpl implements PersonService {
	
	/* (non-Javadoc)
	 * @see com.cvicse.service.impl.PersonService#save()
	 */
	public void save(){
		System.out.println("我调用了Save方法!");
	}
}

 

Java代码 复制代码
  1. package com.cvicse.service;   
  2.   
  3. /**  
  4.  *   
  5.  * @功能 :测试类的接口      
  6.  * @创建人   gao_jie  
  7.  * @创建日期 Jun 16, 2009  
  8.  * @版本     1.0  
  9.  *   
  10.  */  
  11. public interface PersonService {   
  12.   
  13.     /**  
  14.      * 保存接口  
  15.      */  
  16.     public abstract void save();   
  17. }  
package com.cvicse.service;

/**
 * 
 * @功能 :测试类的接口    
 * @创建人   gao_jie
 * @创建日期 Jun 16, 2009
 * @版本     1.0
 * 
 */
public interface PersonService {

	/**
	 * 保存接口
	 */
	public abstract void save();
}

 5.测试类

Java代码 复制代码
  1. package com.cvicse.test;   
  2.   
  3. import com.cvicse.service.PersonService;   
  4. import com.cvicse.util.ClassPathApplicationContext;   
  5.   
  6. /**  
  7.  *   
  8.  * @功能;测试类  
  9.  * @创建人 gao_jie  
  10.  * @创建日期 Jun 16, 2009  
  11.  * @版本 1.0  
  12.  *   
  13.  */  
  14. public class Test {   
  15.   
  16.     /**  
  17.      * @param args  
  18.      */  
  19.     public static void main(String[] args) {   
  20.         // TODO Auto-generated method stub   
  21.         ClassPathApplicationContext xp = new ClassPathApplicationContext(   
  22.                 "applicationContext.xml");   
  23.         PersonService personService = (PersonService) xp.getBean("person");   
  24.         personService.save();   
  25.     }   
  26. }  
package com.cvicse.test;

import com.cvicse.service.PersonService;
import com.cvicse.util.ClassPathApplicationContext;

/**
 * 
 * @功能;测试类
 * @创建人 gao_jie
 * @创建日期 Jun 16, 2009
 * @版本 1.0
 * 
 */
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ClassPathApplicationContext xp = new ClassPathApplicationContext(
				"applicationContext.xml");
		PersonService personService = (PersonService) xp.getBean("person");
		personService.save();
	}
}

 通过简单的测试可以输出: 

 我调用了Save方法!

呵呵,目的提高自己的编码质量,模拟也是一种进步!

IT世界里的“国境线”(芯片与算法篇) 首先分析下概念,对于芯片,相信大家已经比较了解,就不做过多的解释。我们说一下算法,虽然算法是应用在IT领域,但我相信学数学的同学,特别是学习计算数学的,对算法应该更加熟悉。记得在本科课程中,专门有一门课叫做“算法设计”。从概念上来讲,算法指的是解决问题的方法和流程,是一段逻辑,一系列解决问题的清晰指令。或者更通俗一点来讲,算法是从A到B,所有可能的计算方式。 一、 芯片与算法的关系 芯片和算法并不是独立或者对立的两个个体。芯片本身就集成了算法。算法是一种逻辑概念,芯片是算法的一种表现形式,软件也是算法的 阅读详情

相关推荐

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

weixin_55249340的博客 3万+

spring使用context:property-placeholder载不进属性问题

环境:spring3.1.1+mybatis3.2.8+mybatis-spring1.2.3 今天整合了SpringMVC + MyBatis,发现了一个问题,在这里做个记录,各位如果遇到相同的问题,可以参考下。 context:property-placeholder location="classpath:prop/jdbc.properties" /> 引

小英雄 4614

Goose开源程序本地机上 AI 代理,能够从头到尾自动执行复杂的开发任务。Goose 不仅可以提供代码建议,还可以自主构建整个项目、编写和执行代码、调试故障、编排工作流程以及与外部 API 交互

Goose开源程序 是您的本机上 AI 代理,能够从头到尾自动执行复杂的开发任务。Goose 不仅可以提供代码建议,还可以自主构建整个项目、编写和执行代码、调试故障、编排工作流程以及与外部 API 交互。无论您是在构建想法原型、优化现有代码,还是管理复杂的工程管道,goose 都能适应您的工作流程并精确执行任务。

struggle2025的博客 2041

Spring IoC之ClassPathXmlApplicationContext

文章目录概述ClassPathXmlApplicationContext构造方法之configLocations1、 super(parent)2、设置文件配置路径3、 refresh()构造方法之paths总结参考资料 概述 前面我们讲了 Spring 资源的定义和资源的加载情况,还剩下 BeanFactory、BeanDefinition、BeanDefinitionReader 和 Appl...

Herishwater的博客 2046

AI算力网络与通信领域流量分析:优化策略探讨_副本

今天的AI就像一个"超级吃货",每天要"吃"掉海量数据、“消耗"巨量算力——训练一个千亿参数的大模型,可能需要上万块GPU同时工作数周,其间产生的数据传输量足以填满数百万个1TB硬盘。这些GPU和计算节点通过网络连接形成"AI算力网络”,而数据在节点间的流动就是"通信流量"。如果把算力比作AI的"肌肉",那流量就是"血液"——血液不通畅,肌肉再强也使不上劲。

AI天才研究院 1198

网络摄像头(IPC)介绍:类型、供电、镜头、夜视等

IPC(Internet Protocol Camera,网络摄像头),它是一种由传统摄像机与网络技术结合所产生的新一代摄像机。它可以将视频、音频、报警及控制信号通过网络传输,接受网络监控主机(NVR或监控管理平台)的管理。IPC可与路由器、交换机、NVR等设备组建成为监控系统。

学无止境,Fighting! 1万+

ClassPathXmlApplicationContext容器

ClassPathXmlApplicationContext 默认获取的是WEB-INF/classes/下的路径,也就是在myeclipse的src下的路径,所以用这个是获取不到WEB-INF下的配置文件的。 下面是几个用法,引src下的一个文件,有以下几种方式: BeanFactory ac = new ClassPathXmlApplicationContext("applicationContext.xml"); BeanFactory ac = new ClassPathXmlApplica

E大叔的博客 2167

IC设计新手必看:如何正确使用去耦电容(decap)避免电源噪声?

本文深入探讨了IC设计中去耦电容(decap)的应用技巧,从核心原理到布局实现,帮助新手工程师有效抑制电源噪声。文章详细解析了MIM、MOM等电容类型的特性与选择策略,并提供了先进的布局技巧和验证方法,特别适用于28nm以下先进工艺的电路设计挑战。

weixin_30555125的博客 114

ClassPathXmlApplicationContext 介绍

<br />Class ClassPathXmlApplicationContextjava.lang.Object  org.springframework.core.io.DefaultResourceLoader      org.springframework.context.support.AbstractApplicationContext          org.springframework.context.support.AbstractRefreshableApplicationCon

Mr. David 专栏 1万+

使用KITTI数据集测试不同算法的性能

该文章将使用同一个kitti数据集来测试不同算法的性能,目前已经测试的算法包括:LIO-SAM,FAST-LIO2,Point-LIO,Faster-LIO。

wwtx的博客 2586

Python+ArcGIS实战:5步搞定土壤类型预测(附随机森林模型配置技巧)

本文详细介绍了如何结合Python与ArcGIS,利用随机森林模型进行土壤类型预测。通过5个核心步骤——数据预处理、样本创建、模型构建、空间预测与精度验证,构建了一套自动化、高精度的空间预测工作流,并提供了关键的模型配置与调参技巧,助力GIS开发者高效完成土壤制图任务。

weixin_29227585的博客 396

Spring ClassPathXmlApplicationContext

介绍: Spring提供了两种类型的容器: BeanFactory :它支持bean实例化和连接 ApplicationContext :它扩展了BeanFactory ,因此提供了所有这些功能,就像BeanFactory一样。 此外,它提供BeanPostProcessor的自动注册,国际化以及更多功能 Spring容器负责实例化和管理Spring bean的生命周期。 C...

最佳 Java 编程 583

从0玩转Mamba神经网络:理论+实战的保姆级教程

Mamba神经网络是一种基于状态空间模型(SSM)的高效序列处理架构,相比Transformer具有更快的推理速度和更低的内存消耗。本文提供从理论到实践的完整指南,详细讲解Mamba的工作原理、与Transformer的差异,并给出基于PyTorch的文本分类实战示例。教程包含环境配置、数据处理、模型搭建、训练评估全流程,展示了Mamba在IMDb情感分析任务中的应用。文章还探讨了Mamba的性能优势及进阶方向,为开发者提供了探索这一新兴技术的实用指南。通过阅读本文,读者可以快速掌握Mamba的核心概念并上

FJN110的博客 316

模拟spring中的ClassPathXmlApplicationContext类的实现

     最近,看spring,觉得spring的一些源码,很牛就来模仿下,模仿的目的不是为了炫耀啥,只是提高自己的编码质量。 要模仿ClassPathXmlApplicationContext类的实现,首先要读取spring中applicationContext.xml的内容,同时还要生成类的实例,自然用到的技术就有 dom4j的操作、再就是java 的反射机制、路径操作。 为了测试我在ap...

gaojie1190的专栏 205

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring中BeanFacory的模拟实现(ClassPathXMLApplicationContext)

模拟Spring的ClassPathXMLApplicationContext类,从xml配置文件中读取然后完成bean的实例化以及bean的属性的依赖注入1.定义配置文件  2.定义一个BeanFacory接口    这个接口的就是为了方便通过

dyy_gusi的博客 819

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring IoC的模拟实现

Spring最重要的两大块,一个是依赖注入,另一个就是切面编程。其中,依赖注入用的范围更广。在WEB编程之中,通过xml来配置各个Bean之间的关系,使得开发过程更符合高内聚,低耦合的要求。 众所周知,使用Spring时,需要定义一个listener在web.xml文件中。当请求到达服务器是,根据listener,就会自动读取配置的applicationContext.xml文件。这个xml文件

卧龙居 1500

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spring的beanFacotry模拟

Spring中有两个重要概念之一---IOC(inversionofcontrol)控制反转,就是对象由beanfactory产生对象,beanfactory里面有一个容器,他加载类对象,容器是一个map。实现简单模拟beanfactory://调用程序public class Test { public static void main(String[] arg...

weixin_33965305的博客 125

Spring IoC模拟

模拟IoC 1.导入jdom架包获取xml文件内容。 2.创建dao(数据访问层),daoimpl(实现dao接口),model(实体层),Service(业务逻辑层)。 2.1 daoImpl实现了dao接口的save方法。 2.2 Service中创建UserDAO属性,设置了add方法。 3.模拟Spring 3.1配置xml文件 <beans> <bean id...

OVO_LQ_Start的博客 678

简单代码 模拟 spring的IOC机制

在我们学习spring之前,根据spring的特性,我们来自己来模拟一个spring出来,也就是说不利用spring来实现spring的效果。本实例主要是实现spring的IOC功能。 首先我们把我们用的dao、service、entity定义出来: Student.java : [java] view plaincopyprint?

boyi87的专栏 543

模拟实现Spring IoC功能

为了加深理解Spring 今天自己写了一个模拟的Spring.... 步骤: 1.利用jdom解析bean.xml(pull,sax也能够,我这里用了jdom) 2.先解析全部的&lt;bean/&gt;,再解析全部的&lt;property/&gt;.假设边解析&lt;bean/&gt;,边解析&lt;property/&gt;,会导致property的ref找不到相应的b...

weixin_34228662的博客 77

Spring源码学习之:模拟实现BeanFactory,从而说明IOC容器的大致原理

spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了。那么它的原理是什么呢?是怎么实现的呢?下面我来简单的模拟一下spring的机制,相信看完之后就会对spring的原理有一定的了解。   spring使用BeanFactory来实例化、配置和管理对象,但是它只是一个接口,里面有一个getBean()...

weixin_34072637的博客 85

Spring 之 模拟Spring中的IOC

Sprig 之 模拟Spring IOC          IOC是Spring的核心,其他的我也不多说了,直接进入主题。   1.       创建实体类User.java package com.zsw.spring.ioc;   public c

sz_bdqn的专栏 1012

通过代码模拟dom4j解析spring的ApplicationContext XML文件

首先我们要了解这个dom4j解析,dom4j是java XML的api,是一个非常优秀的xml解析API,它集成了dom,sax,jdom的优点,解析速度快,内存占用小。 我们有dom4j需要用到dom4j.jar的jar包,我这里是简单的模拟spring的IOC,是来模拟spring的beanFactory的,所以我还需要spring3.6的所有jar包,还有一个common.

nethackatschool的专栏 811

自己动手模拟spring的IOC

我们这里是模拟spring,主要模拟spring中的IOC功能,所以在此我们一样要在service层中定义dao的实例,当然不用new出来,我们就通过spring的IOC把这里的dao层注入进来。不要忘了对dao提供set。Get方法,因为IOC的底层其实就是利用反射机制实现的,他把dao注入进来,其实底层就是通过反射set进来的。 首先我们把我们用的dao、service、entity定义出来...

weixin_30664539的博客 161

反射的作用之spring的简单模拟

我们都知道spring框架主要起管理作用,它的核心配置文件时bean.xml,那么他是如何通过配置文件来管理这么多实体类的呢。下面看简单的模拟。代码是跟着马老师敲的。 先建立如图所示框架结构,当然这样写主要是巩固对层次结构的建立,单纯模拟spring的核心主要是ClassPathXmlApplicationContext那个类。 步骤1. 首先建立User实体

afengxg123的专栏 594

模拟spring

  利用dom4j简单模拟了一下spring是如何注入的,并用junit简单进行了一下测试。   定义一个BeanFactory接口,包含一个得到bean的方法 public interface BeanFactory { Object getBean(String name); }  定义一个ClassPathXmlApplicationContext类,利用dom4j解析bea...

心す晨 127
上一篇: spring中ClassPathXmlApplicationContext类的简单使用
下一篇: Spring中监听器的详解
xrt95050
博客等级 码龄20年 359粉丝 71原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值