java

位置:IT落伍者 >> java >> 浏览文章

简单模拟spring的容器管理bean


发布日期:2018年06月15日
 
简单模拟spring的容器管理bean
packagecomspring;

importjavaioIOException;

importURL;

importjavautilArrayList;

importjavautilHashMap;

importjavautilList;

importjavautilMap;

importorgjdomDocument;

importorgjdomElement;

importorgjdomJDOMException;

importorgjdominputSAXBuilder;

importorgjdomxpathXPath;

importcomvoBeanDefinition;

/**

*简单模拟spring的ClassPathXmlApplicationContextspring容器管理bean

*

*@authorzdw

*

*/

@SuppressWarnings(unchecked)

publicclassMyApplicationContext

{

privateList<BeanDefinition>list=newArrayList<BeanDefinition>();

privateMap<StringObject>sigletons=newHashMap<StringObject>();

publicMyApplicationContext(StringfileName)

{

thisreadXML(fileName);

try

{

instanceBeans();

}

catch(Exceptione)

{

eprintStackTrace();

}

}

/**

*实例化所有bean

*

*@throwsInstantiationException

*@throwsIllegalAccessException

*@throwsClassNotFoundException

*/

privatevoidinstanceBeans()throwsInstantiationException

IllegalAccessExceptionClassNotFoundException

{

for(BeanDefinitionbean:list)

{

if(null!=beangetClassName()&&beangetClassName()length()>)

sigletonsput(beangetId()ClassforName(beangetClassName())

newInstance());

}

}

/**

*读取xml配置

*

*@paramfileName

*/

publicvoidreadXML(StringfileName)

{

SAXBuilderbuilder=newSAXBuilder();

URLurl=thisgetClass()getClassLoader()getResource(fileName);

try

{

Documentdoc=builderbuild(url);

XPathxpath=XPathnewInstance(//ns:beans/ns:bean);

xpathaddNamespace(ns

);

List<Element>beans=xpathselectNodes(doc);

for(Elementbean:beans)

{

Stringid=beangetAttributeValue(id);

StringclassName=beangetAttributeValue(class);

BeanDefinitionbeanDefinition=newBeanDefinition(id

className);

listadd(beanDefinition);

}

}

catch(JDOMExceptione)

{

eprintStackTrace();

}

catch(IOExceptione)

{

eprintStackTrace();

}

}

/**

*得到指定id的bean

*

*@paramid

*@return

*/

publicObjectgetBean(Stringid)

{

returnsigletonsget(id);

}

}

测试

@Test

publicvoidtestMyUserService()

{

MyApplicationContextctx=newMyApplicationContext(beansxml);

UserServiceus=(UserService)ctxgetBean(userService);

usprint();

}

代码下载点击

上一篇:Eclipse快捷键和提高效率的好习惯

下一篇:在Struts中使用displaytag标签的排序