packagecom
spring;
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();
}
代码下载点击