spring 探索(一)

  • 解析获取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就完成了。

你可能感兴趣的:(spring 探索(一))