java实现Spring在XML配置java类的方法

网友投稿 241 2023-06-28


java实现Spring在XML配置java类的方法

1. 创建自己的bean文件:beans.xml

test

com.cxm.test.SysHelloImpl

2. 提供解析xml类:XmlUtils

/**

*

*/

package com.cxm.xmlutil;

import java.io.InputStream;

import java.util.Iterator;

import java.util.Map;

import org.jdom.Attribute;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.input.SAXBuilder;

import org.jdom.xpath.XPath;

import com.cxm.beaninfo.BeanInfo;

/**

* @author admin

*

*/

public class XmlUtils

{

public static void parseXmlDef(InputStream in, Map beanDefMap,

StringBuffer sb) throws Exception

{

SAXBuilder reader = new SAXBuilder(false);

Document doc = null;

try

{

doc = reader.http://build(in);

Iterator beanIt = XPath.selectNodes(doc, "/busi-beans/beans/bean")

.iterator();

Element e;

BeanInfo beanDef;

while (beanIt.hasNext())

{

beanDef = new BeanInfo();

e = (Element) beanIt.next();

Attribute attrId = e.getAttribute("id");

Attribute attrType = e.getAttribute("type");

Attribute singleType = e.getAttribute("single");

boolean isSingle = true;

if(null != singleType&&"1".equals(singleType.getValue())){

isSingle= false;

}

beanDef.setSingle(isSingle);

beanDef.setBeanId(attrId.getValue());

beanDef.setType(attrType.getValue());

beanDef.setBeanDesc(getText(e, "desc"));

beanDef.setImplClassName(getText(e, "impl-class"));

//处理初始化参数

beanDefMap.put(attrId.getValue(), beanDef);

}

}

catch (Exception e)

{

e.printStackTrace();

}

}

/**

* 根据指定的element, xPath获取XML文档内容

*

* @param p_element

* @param p_xPath

* @return

* @throws Exception

*/

public static String getText(Element p_element, String p_xPath)

throws Exception {

String text = null;

Element e=(Element)XPath.selectSingleNode(p_element,p_xPath);

if (e != null) {

text = e.getText();

} else {

}

return text;

}

}

3.定义bean IO

/**

*

*/

package com.cxm.beaninfo;

/**

* @author admin

*

*/

public class BeanInfo

{

private String beanId;

private String type;

private String beanDesc;

public String getBeanDesc()

{

return beanDesc;

}

public void setBeanDesc(String beanDesc)

{

this.beanDesc = beanDesc;

}

public String getType()

{

return type;

}

public void setType(String type)

{

this.type = type;

}

private String implClassName;

public String getBeanId()

{

return beanId;

}

public void setBeanId(String beanId)

{

this.beanId = beanId;

}

public String getImplClassName()

{

return implClassName;

}

public void setImplClassName(String implClassName)

{

this.implClassName = http://implClassName;

}

public boolean isSingle()

{

return isSingle;

}

public void setSingle(boolean isSingle)

{

this.isSingle = isSingle;

}

private boolean isSingle = true;

}

4.bean的创建类:BeanUtil

/**

*

*/

package com.cxm.bean;

/**

* @author admin

*

*/

public class BeanUtil

{

private static XmlBeanFactory factory = new XmlBeanFactory();

/**

* 获取定义好的Bean对象

* @param p_beanId

* @return

* @throws Exception

*/

public static Object createBean(String p_beanId)

throws Exception {

return factory.createBean(p_beanId);

}

}

/**

*

*/

package com.cxm.bean;

import java.io.FileNotFoundException;

import java.io.InputStream;

import java.lang.reflect.Constructor;

import java.util.HashMap;

import java.util.Map;

import com.cxm.beaninfo.BeanInfo;

import com.cxm.exception.NoSuchBeanDefinitionException;

import com.cxm.xmlutil.XmlUtils;

/**

* @author admin

*

*/

public class XmlBeanFactory

{

private static String BEAN_XML = "/beans.xml";

private static Map beanDefMap = new HashMap();

private static Map instanceMap = new HashMap();

static {

InputStream in = XmlBeanFactory.class.getResourceAsStream(BEAN_XML);

if(in ==null){

try{

throw new FileNotFoundException();

}catch (FileNotFoundException e){

e.printStackTrace();

}

}

StringBuffer sb = new StringBuffer();

try

{

XmlUtils.parseXmlDef(in, beanDefMap, sb);

}

catch (Exception e)

{

throw new RuntimeException();

}

}

public Object createBean(String beanId) throws Exception{

if(beanId==null || beanId.trim()==""){

throw new Exception("BeanId can not NULL or '' ");

}

BeanInfo beanInfo = beanDefMap.get(beanId);

if(null ==beanInfo ){

throw new NoSuchBeanDefinitionException(" beanid is not define in xml");

}

Object instance;

if(beanInfo.isSingle()){

instance =instanceMap.get(beanId);

if(null != instance){

return instance;

}

}

StrinWKMKJTkg implClass = beanInfo.getImplClassName();

Constructor> constructor = Class.forName(implClass.trim()).getConstructor();

instance = constructor.newInstance();

if(beanInfo.isSingle()){

instanceMap.put(beanId, instance);

}

return instance;

}

}

5. 测试:

/**

*

*/

package com.cxm.test;

/**

* @author admin

*

*/

public interface SysHello

{

void sysHello();

}

/**

*

*/

package com.cxm.test;

/**

* @author admin

*

*/

public class SysHelloImpl implements SysHello

{

@Override

public void sysHello()

{

System.out.println("hello world!");

}

}

/**

*

*/

package com.cxm.test;

import com.cxm.bean.BeanUtil;

/**

* @author admin

*

*/

public class Test

{

/**

* @param args

* @throws Exception

*/

public static void main(String[] args) throws Exception

{

SysHello s = (SysHello)BeanUtil.createBean("SysHelloImpl");

s.sysHello();

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java HashMap,TreeMap与LinkedHashMap的详解
下一篇:java环境中的JDK、JVM、JRE详细介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~