TinySpring构建过程Step6-ApplicationContext

其实BeanFactory已经提供了完整的功能,但是使用起来比较麻烦。现在用ApplicationContext做一个借口封装。

1. ApplicationContext接口

    public interface ApplicationContext extends BeanFactory {
    }

2. AbstractApplicationContext抽象类

    public abstract class AbstractApplicationContext implements ApplicationContext {
        protected AbstractBeanFactory beanFactory;
    
        public AbstractApplicationContext(AbstractBeanFactory beanFactory) {
            this.beanFactory = beanFactory;
        }
    
        public void refresh() throws Exception{
        }
    
        @Override
        public Object getBean(String name) throws Exception {
            return beanFactory.getBean(name);
        }
    }

3. ClassPathXmlApplicationContextxml的ApplicationContext,refesh()用来初始化Bean

    public class ClassPathXmlApplicationContext extends AbstractApplicationContext {
    
        private String configLocation;
    
        public ClassPathXmlApplicationContext(String configLocation) throws Exception {
            this(configLocation, new AutowireCapableBeanFactory());
        }
    
        public ClassPathXmlApplicationContext(String configLocation, AbstractBeanFactory beanFactory) throws Exception {
            super(beanFactory);
            this.configLocation = configLocation;
            refresh();
        }
    
        @Override
        public void refresh() throws Exception {
            XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(new ResourceLoader());
            xmlBeanDefinitionReader.loadBeanDefinitions(configLocation);
            for (Map.Entry<String, BeanDefinition> beanDefinitionEntry : xmlBeanDefinitionReader.getRegistry().entrySet()) {
                beanFactory.registerBeanDefinition(beanDefinitionEntry.getKey(), beanDefinitionEntry.getValue());
            }
        }
    
    }

4. 测试代码,比之前使用更佳简便,封装了实现细节。

    @Test
    public void test() throws Exception {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("tinyioc.xml");
        HelloWorldService helloWorldService = (HelloWorldService) applicationContext.getBean("helloWorldService");
        helloWorldService.helloWorld();
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。