美文网首页
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