java实现Spring在XML配置java类的方法
1.创建自己的bean文件:beans.xml
<?xmlversion="1.0"encoding="UTF-8"?> <busi-beans> <beans> <beanid="SysHelloImpl"type="com.cxm.test.SysHello"> <desc>test</desc> <impl-class>com.cxm.test.SysHelloImpl</impl-class> </bean> </beans> </busi-beans>
2.提供解析xml类:XmlUtils
/** * */ packagecom.cxm.xmlutil; importjava.io.InputStream; importjava.util.Iterator; importjava.util.Map; importorg.jdom.Attribute; importorg.jdom.Document; importorg.jdom.Element; importorg.jdom.input.SAXBuilder; importorg.jdom.xpath.XPath; importcom.cxm.beaninfo.BeanInfo; /** *@authoradmin * */ publicclassXmlUtils { publicstaticvoidparseXmlDef(InputStreamin,Map<String,BeanInfo>beanDefMap, StringBuffersb)throwsException { SAXBuilderreader=newSAXBuilder(false); Documentdoc=null; try { doc=reader.build(in); IteratorbeanIt=XPath.selectNodes(doc,"/busi-beans/beans/bean") .iterator(); Elemente; BeanInfobeanDef; while(beanIt.hasNext()) { beanDef=newBeanInfo(); e=(Element)beanIt.next(); AttributeattrId=e.getAttribute("id"); AttributeattrType=e.getAttribute("type"); AttributesingleType=e.getAttribute("single"); booleanisSingle=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(Exceptione) { e.printStackTrace(); } } /** *根据指定的element,xPath获取XML文档内容 * *@paramp_element *@paramp_xPath *@return *@throwsException */ publicstaticStringgetText(Elementp_element,Stringp_xPath) throwsException{ Stringtext=null; Elemente=(Element)XPath.selectSingleNode(p_element,p_xPath); if(e!=null){ text=e.getText(); }else{ } returntext; } }
3.定义beanIO
/** * */ packagecom.cxm.beaninfo; /** *@authoradmin * */ publicclassBeanInfo { privateStringbeanId; privateStringtype; privateStringbeanDesc; publicStringgetBeanDesc() { returnbeanDesc; } publicvoidsetBeanDesc(StringbeanDesc) { this.beanDesc=beanDesc; } publicStringgetType() { returntype; } publicvoidsetType(Stringtype) { this.type=type; } privateStringimplClassName; publicStringgetBeanId() { returnbeanId; } publicvoidsetBeanId(StringbeanId) { this.beanId=beanId; } publicStringgetImplClassName() { returnimplClassName; } publicvoidsetImplClassName(StringimplClassName) { this.implClassName=implClassName; } publicbooleanisSingle() { returnisSingle; } publicvoidsetSingle(booleanisSingle) { this.isSingle=isSingle; } privatebooleanisSingle=true; }
4.bean的创建类:BeanUtil
/** * */ packagecom.cxm.bean; /** *@authoradmin * */ publicclassBeanUtil { privatestaticXmlBeanFactoryfactory=newXmlBeanFactory(); /** *获取定义好的Bean对象 *@paramp_beanId *@return *@throwsException */ publicstaticObjectcreateBean(Stringp_beanId) throwsException{ returnfactory.createBean(p_beanId); } } /** * */ packagecom.cxm.bean; importjava.io.FileNotFoundException; importjava.io.InputStream; importjava.lang.reflect.Constructor; importjava.util.HashMap; importjava.util.Map; importcom.cxm.beaninfo.BeanInfo; importcom.cxm.exception.NoSuchBeanDefinitionException; importcom.cxm.xmlutil.XmlUtils; /** *@authoradmin * */ publicclassXmlBeanFactory { privatestaticStringBEAN_XML="/beans.xml"; privatestaticMap<String,BeanInfo>beanDefMap=newHashMap<String,BeanInfo>(); privatestaticMap<String,Object>instanceMap=newHashMap<String,Object>(); static{ InputStreamin=XmlBeanFactory.class.getResourceAsStream(BEAN_XML); if(in==null){ try{ thrownewFileNotFoundException(); }catch(FileNotFoundExceptione){ e.printStackTrace(); } } StringBuffersb=newStringBuffer(); try { XmlUtils.parseXmlDef(in,beanDefMap,sb); } catch(Exceptione) { thrownewRuntimeException(); } } publicObjectcreateBean(StringbeanId)throwsException{ if(beanId==null||beanId.trim()==""){ thrownewException("BeanIdcannotNULLor''"); } BeanInfobeanInfo=beanDefMap.get(beanId); if(null==beanInfo){ thrownewNoSuchBeanDefinitionException("beanidisnotdefineinxml"); } Objectinstance; if(beanInfo.isSingle()){ instance=instanceMap.get(beanId); if(null!=instance){ returninstance; } } StringimplClass=beanInfo.getImplClassName(); Constructor<?>constructor=Class.forName(implClass.trim()).getConstructor(); instance=constructor.newInstance(); if(beanInfo.isSingle()){ instanceMap.put(beanId,instance); } returninstance; } }
5.测试:
/** * */ packagecom.cxm.test; /** *@authoradmin * */ publicinterfaceSysHello { voidsysHello(); } /** * */ packagecom.cxm.test; /** *@authoradmin * */ publicclassSysHelloImplimplementsSysHello { @Override publicvoidsysHello() { System.out.println("helloworld!"); } } /** * */ packagecom.cxm.test; importcom.cxm.bean.BeanUtil; /** *@authoradmin * */ publicclassTest { /** *@paramargs *@throwsException */ publicstaticvoidmain(String[]args)throwsException { SysHellos=(SysHello)BeanUtil.createBean("SysHelloImpl"); s.sysHello(); } }
以上这篇java实现Spring在XML配置java类的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。