美文网首页
IOC容器源码解读笔记(spring 5.0.X)

IOC容器源码解读笔记(spring 5.0.X)

作者: 白桦树97 | 来源:发表于2019-07-17 10:11 被阅读0次

    一:举一个最简单的例子()

    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
            System.out.println(ac.getBean(DeviceService.class));
    

    二:这段代码内部实现原理如图所示


    image.png

    1.调用构造方法

    public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {
            this();    //调用父类构造方法  创建默认工厂 this.beanFactory = new DefaultListableBeanFactory();
            register(annotatedClasses); //注册spring原有必须的bean 看以看到beanFactory中的BeanDefinitionMap 和 BeanDefinitionNames 都有了值
            refresh();   //注册并实例化普通的bean,最终存储在beanFactory中的SingleonObjects中。
        }
    

    其它:

    • 对象和springbean的区别
      对象不一定是springbean
      但springbean一定是个对象,并且一定要经过完整的spring生命周期
    • beanFactory 和 FactoryBean 的区别:
      FactoryBean就是一个特殊的bean
      而BeanFactory才是生产bean的地方
    • lazy加载的时候
      BeanDefinitionMap(描述这个bean的所有信息,上图的中间粉色框)会有值,但是SingleonObjects中没有值。只有程序第一次用到时才会实例化(就一次)。
      -原型模式:实际上就是懒加载,只不过每次加载都会实例化。

    相关文章

      网友评论

          本文标题:IOC容器源码解读笔记(spring 5.0.X)

          本文链接:https://www.haomeiwen.com/subject/ommflctx.html