自己重写Spring_XmlBeanFactory

自己重写Spring_XmlBeanFactory
2007年11月25日 星期日 01:53
自己重写Spring_XmlBeanFactory
-----------------------------------------------------------------------------------------
HelloWorld.java
-----------------------------------------------------------------------------------------
public interface HelloWorld {

void setName(String name);

String say();

}
-----------------------------------------------------------------------------------------
HelloWorldImpl.java
-----------------------------------------------------------------------------------------

public class HelloWorldImpl implements HelloWorld {

private String >
public void setName(String name) {
this.name = name;

}

public String say() {
if (name == null)
return "Hello,world!";
return "Hello," + name + "!";
}

}

-----------------------------------------------------------------------------------------
SpringStartup.java
-----------------------------------------------------------------------------------------
public class SpringStartup {

/**
* @param args
*/
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory("beans.xml");
HelloWorld hello = (HelloWorld) factory.getBean("a");

System.out.println(hello.say());


}

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

<bean >
<property value="a" />

</bean>

<bean >
<property value="xiong" />

</bean>


</beans>
-----------------------------------------------------------------------------------------
XmlBeanFactory.java
-----------------------------------------------------------------------------------------
import java.lang.reflect.Method;
import java.util.Properties;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XmlBeanFactory {

private Properties pro;

private Document document = null;

private static String XMLFILE = null;

private static String key = "key";

public XmlBeanFactory(String XMLFILE) {
this.XMLFILE = XMLFILE;
init();

}

private void init() {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(XMLFILE);
} catch (Exception ex) {

ex.printStackTrace();
}
}

// 解析XML文件
private Properties xmlParser(String nodeName, String id_key, String id_value) {

Properties pro = new Properties();
try {

NodeList list = document.getElementsByTagName(nodeName);
for (int k = 0; k < list.getLength(); k++) {

Node fatherNode = list.item(k);

NamedNodeMap attributes = fatherNode.getAttributes();
//
boolean flag = false;
for (int i = 0; i < attributes.getLength(); i++) {

Node attribute = attributes.item(i);

if (attribute.getNodeName().equals(id_key)
&& attribute.getNodeValue().equals

(id_value)) {
flag = true;

}

}
if (!flag)
continue;
//
for (int i = 0; i < attributes.getLength(); i++) {

Node attribute = attributes.item(i);

pro.setProperty(attribute.getNodeName(), attribute
.getNodeValue());
}
//
NodeList childNodes = fatherNode.getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {

Node childNode = childNodes.item(j);

if (childNode instanceof Element) {

NamedNodeMap child_attributes = childNode
.getAttributes();

for (int i = 0; i <

child_attributes.getLength(); i++) {

Node child_attribute =

child_attributes.item(i);

pro.setProperty

(child_attribute.getNodeName(),


child_attribute.getNodeValue());
}
}
}
break;
}

return pro;
} catch (Exception ex) {

ex.printStackTrace();
return null;
}
}

public Object getBean(String id_value) {
String nodeName = "bean";
Properties pro = xmlParser(nodeName, "id", id_value);

return ClassLoadFactory.loadClassByConstructor(pro);

}

}

/** 类装载工厂 */
class ClassLoadFactory {

public static Object loadClassByConstructor(Properties pro) {
try {

Class cl = Class.forName(pro.getProperty("class"));

Object obj = cl.newInstance();
Class[] p = { String.class };
//
String name");
String methodName = name.substring(0, 1).toUpperCase()
+ name.substring(1, name.length());
Method method = cl.getMethod("set" + methodName, p);
Object[] value = { pro.getProperty("value") };
method.invoke(obj, value);
//
return obj;
} catch (Exception ex) {

ex.printStackTrace();
return null;
}

}
}
-----------------------------------------------------------------------------------------

本篇日志被作者设置为禁止发表新评论


©2008 Baidu



引文来源 自己重写Spring_XmlBeanFactory_熊熊之家
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值