zoukankan      html  css  js  c++  java
  • Spring源码系列2

    BeanFactory体系结构 

    上面是BeanFactory的体系图,其有两个主要分支:

    ①一条是右侧部分的BeanFactory到最后的XmlBeanFactory这条分支。

    该分支是IOC容器的底层设计,最后的DefaultListableBeanFactory则是spring提供给我们的作为默认的功能完整的底层容器来使用。该类还有个子类XmlBeanFactory,顾名思义是以XML配置方式来使用,但从Spring3.1开始XmlBeanFactory被标记为了过时的类,并推荐我们直接使用DefaultListableBeanFactory,配合XmlBeanDefinitionReader一起使用。

            ClassPathResource resource = new ClassPathResource("classpath:com/lp/bean.xml");
    
            DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
            XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
            //加载Bean定义
            reader.loadBeanDefinitions(resource);
    
            //获取Bean
            User user = (User) factory.getBean("user");
            System.out.println(user.getName());

    ②另外一条就是左侧的BeanFactory到ApplicationContext,到左侧WebApplicationContext到XmlWebApplicationContext,或者到右侧的AbstractApplicationContext到我们所熟知的AnnotationConfigApplicationContext、ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationConfigWebApplicationContext。

    BeanFactory和ApplicationContext的区别

    官方文档:7.16.1 BeanFactory or ApplicationContext?

    Spring提供了两种容器类型:BeanFactory和ApplicationContext。BeanFactory属于底层容器,提供了基本的DI支持。而ApplicationContext是基于BeanFactory构建的高级容器,除了具有BeanFactory的全部功能外,还有AOP,事务,国际化,消息源以及应用程序事件处理等功能。 

    • BeanFactory:基础类型IoC 容器,提供完整的IoC 服务支持。如果没有特殊指定,默认采用延迟初始化策略(lazy-load )。只有当客户端对象需要访问(getBean)容器中的某个受管对象的时候,才对该受管对象进行初始化以及依赖注入操作。所以,相对来说,容器启动初期速度较快,所需要的资源有限。对于资源有限,并且功能要求不是很严格的场景,BeanFactory是比较合适的IoC 容器选择。
    • ApplicationContext:ApplicationContext在BeanFactory的基础上构建,是相对比较高级的容器实现,除了拥有BeanFactory的所有支持,ApplicationContext还提供了其他高级特性,比如事件发布、国际化信息支持等。ApplicationContext所管理的对象,在该类型容器启动之后默认全部初始化并绑定完成。所以,相对于BeanFactory来说,ApplicationContext要求更多的系统资源,同时,因为在启动时就完成所有初始化,容器启动时间较之BeanFactory也会长一些。在那些系统资源充足并且要求更多功能的场景中,ApplicationContext类型的容器是比较合适的选择。
  • 相关阅读:
    ASIHTTPRequest详解
    Aviary 滤镜 教程 照片编辑器
    IOS设计模式之四(备忘录模式,命令模式)
    IOS设计模式之三(适配器模式,观察者模式)
    IOS设计模式之二(门面模式,装饰器模式)
    MysqlNDB集群配置与管理
    MySqlNDB使用自带的ndb_setup.py安装集群
    Servlet引擎tomcat之安装
    分布式之Zookeeper使用
    分布式之ZookeeperMac安装
  • 原文地址:https://www.cnblogs.com/rouqinglangzi/p/11189527.html
Copyright © 2011-2022 走看看