java 实现 Spring 在 XML 配置 java 类的方法
这里有新鲜出炉的 Java 并发编程示例, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
下面小编就为大家带来一篇 java 实现 Spring 在 XML 配置 java 类的方法小编觉得挺不错的, 现在就分享给大家, 也给大家做个参考一起跟随小编过来看看吧
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();
- }
- }
来源: http://www.phperz.com/article/18/0212/359308.html