源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-05-16 19:46 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java实现Spring在XML配置java类的方法
[b]1. 创建自己的bean文件:beans.xml [/b]
<?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>
[b]2. 提供解析xml类:XmlUtils [/b]
/**
 * 
 */
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;
 }
}
[b]3.定义bean IO [/b]
/**
 * 
 */
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;
 
}
[b]4.bean的创建类:BeanUtil [/b]
/**
 * 
 */
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;
 }
}
[b]5. 测试: [/b]
/**
 * 
 */
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类的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部