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类的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。