zoukankan      html  css  js  c++  java
  • BeanFactory和ApplicationContext的区别

            ApplicationContext是BeanFactory的子接口。

      BeanFactory:bean工厂接口;负责创建bean实例;容器里面保存的单例bean其实是一个map,它是Spring最底层的接口,只提供了简单的容器功能(只有实例化和拿对象(手动拿)的功能,如AOP功能、Web应用等都没有),BeanFactory在启动的时候不会实例化Bean,只有从容器中拿Bean的时候才会去实例化

      ApplicationContext:是容器的接口;更多的负责容器接口的实现;(可以基于beanFactory创建好的对象之上完成更强大的容器)。

        容器可以从map中获取到这个bean,并且aop、di。在ApplicationContext接口下的这些类中。

      BeanFactory最底层的接口,ApplicationContext是留给程序员使用的ioc容器接口,ApplicationContext是BeanFactory的接口,提供了比BeanFactory更强大的功能,与BeanFactory最大的不同就是它在应用(服务)启动的时候就把Bean实例化完了(可以在Bean配置中使用lazy-init=true来让Bean延迟实例化),BeanFactory只有从容器中拿Bean的时候才会去实例化。

      BeanFactory的优点(延迟实例化):启动时资源占用较少。缺点:后期每次使用某个功能前都需要将与该功能有关的所有bean实例化,响应时间可能会比较长

      ApplicationContext的缺点(不延迟实例化):启动时资源占用多,所有的bean都被实例化,优点:后期使用这些bean的时候就不需要再次实例化,直接调用就可以。

      使用场景:对于启动时需要资源较多的项目可以用BeanFactory,反之用ApplicationContext,不过用的最多的应该还是ApplicationContext,毕竟ApplicationContext可能只会导致启动的时候慢一些,而且启动时将这些Bean都实例化了,如果有错误至少可以及时解决,但是如果使用BeanFactory,那用户使用使用时,实例化某个Bean出错了,那岂不是凉凉,而且用户还要等你实例化完(个人理解)。

      Spring中最大的模式是工厂模式

  • 相关阅读:
    传统目标检测主要结构原理讲解(去除了冗余的知识)
    redis部署,linux下秒级定时监控服务脚本
    第一个脚本部署案例,比较简单,还有redis的部署脚本没有写完
    fabric-sdk-go client开发
    fabric-sdk-go ca开发
    fabric-sdk-go config详解
    pkg/client/msp msp包
    pkg/client/resmgmt resmgmt包
    pkg/client/ledger ledger包
    pkg/client/event event包
  • 原文地址:https://www.cnblogs.com/xing-29391/p/12604190.html
Copyright © 2011-2022 走看看