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类型的容器是比较合适的选择。
  • 相关阅读:
    cidaemon.exe过程cpu入住率和关闭cidaemon.exe加工方法
    .net 一些常用的工具来破解
    关于加密和解密的设计思路
    oncopy和onpaste
    来迁移数据管道
    使用JSP实现商场购物车模块
    2014在辛星Javascript口译科
    Lua学习 1) —— Android呼叫变量值和分配
    HttpSQS
    手机后端开发
  • 原文地址:https://www.cnblogs.com/rouqinglangzi/p/11189527.html
Copyright © 2011-2022 走看看