spring源码学习笔记-第一周(BeanFactory)刘欣从零开始造spring

spring源码学习笔记-第一周(BeanFactory)刘欣从零开始造spring

  1. 对外暴露的Api是AbstractApplicationContex的方法。用AbstractApplicationContext的getBean方法得到一个Bean实例。

  2. 主要的类是DefaultBeanFactory,通过他来连接各个功能类。

  3. XmlBeanDefinitionReader是解析Xml文件的类,也是一个很重要的类,他把Xml文件解析,得到BeanDefinition。

  4. 在BeanDefinitionRegistry接口中抽象了两个方法,用来将解析Xml得到的BeanDefinition注册到BeanDefiniton中的map中(id,BeanDefinition)

  5. BeanFactory是获取Bean实例的接口,具体方法实现也是在DefaultBeanFactory类中,判断是否是单例,如果是单例,调用DefaultSingletonBeanFactory的getBean方法,此时还没有创建实例,所以去创建实例,通过反射创建实例

    ClassLoader beanClassLoader = this.getBeanClassLoader();
                String beanClassName = bd.getBeanClassName();
            try {
    //            return Class.forName(bd.getBeanClassName()).newInstance();
                Class<?> clz = beanClassLoader.loadClass(beanClassName);
                return clz.newInstance();

    将返回的实例放到单例类的map中,下次再调用getBean方法的时候,就直接取出来了。

    如果不是单例,每次都直接创建bean就好了。

    6.ClassPathXmlApplicationContext FileSystemXmlApplicationContext是用来获取Resoutce资源类的,ClassPathResource和他的兄弟类,是将路径下的Xml文件转化为Resource资源类。

    总结:

    感觉功能理解比较容易:每个类的功能都很单一,遵循单一职责原则,每个类都有自己的接口,体现了扩展性,但是自己很菜,看完还是很模糊。


上一篇:spring取代BeanFactory来读取配置文件,反射创建对象并存入map


下一篇:Spring5源码 - 04 invokeBeanFactoryPostProcessors 源码解读_1