- 解析获取xml
- 通过解析的xml获取className
- 通过className获取bean
@Test
public void testGetBean() {
BeanFactory factory = new DefaultBeanFactory("petstore-v1.xml");
BeanDefinition bd = factory.getBeanDefinition("petStore");
assertEquals("org.litespring.service.v1.PetStoreService", bd.getBeanClassName());
PetStoreService ps = (PetStoreService)factory.getBean("petStore");
assertNotNull(ps);
}
实现上述测试类需要DefaultBeanFactory通过路径解析xml
1.获取一个ClassLoader操作类 (spring已有轮子getDefaultClassLoader)
2.使用类操作器将xml路径转化为InputStream进行读取
3.通过SAXReader对xml进行读取,使用Document 进行读取xml每一行,并把解析获取的id和class存储到map中
4.getBeanDefinition即可直接使用id进行获取BeanDefinition
5.有了class的路径,即可通过getBean方法获取到对应的JavaBean
public Object getBean(String beanID) {
// TODO Auto-generated method stub
BeanDefinition bd = this.getBeanDefinition(beanID);
if(bd == null){
return null;
}
ClassLoader cl = ClassUtils.getDefaultClassLoader();
String beanClassName = bd.getBeanClassName();
try {
Class<?> clz = cl.loadClass(beanClassName);
return clz.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
至此,基础的解析xml及获取javabean就完成了。
网友评论