博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单模拟Spring管理Bean对象
阅读量:4655 次
发布时间:2019-06-09

本文共 2024 字,大约阅读时间需要 6 分钟。

1: 首先我们要利用dom4j进行xml的解析,将所有的bean的配置读取出来。

2:利用java的反射机制进行对象的实例化。

3: 直接获得对象

 

package cn.Junit.test;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.Element;import org.dom4j.XPath;import org.dom4j.io.SAXReader;import org.springframework.beans.factory.config.BeanDefinition;public class MyClassPathXmlApplicationContext {	private String filemame;	private List
list = new ArrayList
(); private Map
singletons = new HashMap
(); public MyClassPathXmlApplicationContext() { super(); // TODO Auto-generated constructor stub } public MyClassPathXmlApplicationContext(String filemame) { //1. 读取XML配置文件 this.readXML(filemame); //2.实例化对象 this.instanceBean(); } private void instanceBean() { for (DefBean bean : list) { try { singletons.put(bean.getId(), Class.forName(bean.getClassName()).newInstance()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void readXML(String filemame) { SAXReader saxReader = new SAXReader(); Document document = null; try { URL xmlpath = this.getClass().getClassLoader() .getResource(filemame); document = saxReader.read(xmlpath); Map
nsMap = new HashMap
(); nsMap.put("ns", "http://www.springframework.org/schema/beans");// 加入命名空间 XPath xsub = document.createXPath("//ns:beans/ns:bean");// 创建beans/bean查询路径 xsub.setNamespaceURIs(nsMap);// 设置命名空间 List
beans = xsub.selectNodes(document);// 获取文档下所有bean节点 for (Element element : beans) { String id = element.attributeValue("id");// 获取id属性值 String clazz = element.attributeValue("class"); // 获取class属性值 DefBean bean = new DefBean(id, clazz); list.add(bean); } } catch (Exception e) { e.printStackTrace(); } } //3. 获得bean对象 public Object getBean(String key) { return singletons.get(key); }}

  

 

转载于:https://www.cnblogs.com/E-star/p/3556964.html

你可能感兴趣的文章
搭建Java服务器,并且实现远程安全访问linux系统
查看>>
BitmapDrawable
查看>>
手机连接mac电脑无法使用adb命令解决方法
查看>>
Round#534 div.2-B Game with string
查看>>
HTTP详解
查看>>
C语言两种定义字符串的方式
查看>>
4.11 上午
查看>>
[LeetCode] 96. Unique Binary Search Trees 独一无二的二叉搜索树
查看>>
212. Word Search II
查看>>
Pivot PK Case
查看>>
NodeJS相关笔记(三)
查看>>
C结构体之位域(位段)
查看>>
C#正则表达式简单案例解析
查看>>
HDU 2068 RPG的错排(错排公式 + 具体解释)
查看>>
Html标签之frameset&图片切换
查看>>
OpenGL中实现天空顶(SkyDome)的类: CSkyDome
查看>>
UISwitch | UIStepper
查看>>
jap _spring _maven
查看>>
IE8兼容性问题
查看>>
JS变量作用域
查看>>