首页 > 编程 > Java > 正文

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

2019-11-26 13:30:51
字体:
来源:转载
供稿:网友

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

<?xml version="1.0" encoding="UTF-8"?><busi-beans>	<beans>		<bean id="SysHelloImpl" type="com.cxm.test.SysHello">			<desc>test</desc>			<impl-class>com.cxm.test.SysHelloImpl</impl-class>		</bean>			</beans>		</busi-beans>

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<String,BeanInfo> beanDefMap,			StringBuffer sb) throws Exception	{		SAXBuilder reader = new SAXBuilder(false);		Document doc = null;		try		{			doc = reader.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 = 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<String,BeanInfo> beanDefMap = new HashMap<String,BeanInfo>();		private static Map<String,Object> instanceMap = new HashMap<String,Object>();		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;			}		}		String 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();	}	}

以上这篇java实现Spring在XML配置java类的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表