码迷,mamicode.com
首页 > 编程语言 > 详细

简单解析Spring核心IOC容器原理

时间:2018-07-23 19:52:49      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:actor   cat   ons   exce   classpath   map   ebe   context   核心   

将大体流程解析了一边,具体可以看源代码一个方法一个方法的跟下

XmlBeanFactory的功能是建立在DefaultListableBeanFactory这个基本容器的基础上的,并在这个基本容器的基础上实行了其他诸如XML读取的附加功能。

DefaultListableBeanFactoryBeanFactory的一个默认实现类。

public class XmlBeanFactory extends DefaultListableBeanFactory {
    private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
    
    /**
     * Resource是Spring中对与外部资源的抽象,最常见的是对文件的抽象,特别是XML文件。
     * 而且Resource里面通常保存了Spring使用者的Bean定义
     * 比如applicationContext.xml在被加载时,就会被抽象为Resource来处理。
     */
    public XmlBeanFactory(Resource resource) throws BeansException {
        this(resource, null);
    }
    
    public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
        super(parentBeanFactory);
        this.reader.loadBeanDefinitions(resource);
    }
}

简单示例:

public class MySimpleBeanFactory {
    public static void main(String[] args) {
        ClassPathResource resource = new ClassPathResource("META-INF/beans.xml");
        BeanFactory beanFactory = new XmlBeanFactory(resource);
        User user = beanFactory.getBean("user1", User.class);
        System.out.println(user.getName()+" : "+user.getAge());
    }
}

创建容器的步骤:

  1. 创建bean配置文件的抽象Resource
  2. 创建BeanFactory,例如:XmlBeanFactory
  3. 解析Bean,创建一个BeanDefinition读取器,例如:XmlBeanDefinitionReader->DefaultBeanDefinitionDocumentReader->BeanDefinitionParserDelegate
  4. 得到BeanDefinition后注册到DefaultListableBeanFactory中:
// 最后BeanDefinition就是放到这个map里的
Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(256);

以后会慢慢完善。

简单解析Spring核心IOC容器原理

标签:actor   cat   ons   exce   classpath   map   ebe   context   核心   

原文地址:https://www.cnblogs.com/liycode/p/9356384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!