• Spring容器概述


     容器是Spring 的核心,基于Spring 的应用中可以使用Spring容器来创建、装配和激活组件(bean)

     Spring提供了多种容器实现,并分为两类。①Bean工厂(org.springframework.beans.factory.BeanFactory 接口定义)是最简单的容器,提供了基础的依赖注入支持。② 应用上下文(org.springframework.context.ApplicationContext 接口定义)建立在Bean工厂基础之上,提供了系统构架服务,如:从属性文件中读取文本信息,向有关事件监听器发布时间

       1 Bean工厂采用了工厂设计模式。这个类负责创建和分发Bean。

           在Spring中有几种BeanFactory实现。其中最常用的是org.springframework.beans.factory.xml.XmlBeanFactory,它根据XML文件中的定装载Bean。

           要创建XmlBeanFactory需要传递一个org.springframework.core.io.Resource实例给构造函数。此Resource对象提供xml文件给工厂。

    Resource的实现:
    AbstractResource, ByteArrayResource, ClassPathResource,DescriptiveResource,FileSystemResource,InputStreamResource,PortletContextResource,ServletContextResource,UrlResource


    代码1:利用FileSystemResource来创建一个XmlBeanFactory,其Bean的定义来自文件系统中的xml文件

    BeanFactory factory = new XmlBeanFactory(new FileSystemResource("D:/beans.xml"));
    这行代码告诉Bean工厂从XML文件中读取到Bean的定义信息。但是,现在Bean工厂还没有实例化Bean。Bean是被延迟载入到Bean工厂中。就是说Bean工厂会立即把Bean的定义信息载入进来,但是Bean只有在呗需要的时候才被实例化。

    为了从Beanfactory得到一个Ban,只要简单的调用getBean()方法,把你需要的Bean名字当做参数传递进去就行。

    	MyBean myBean = (MyBean) factory.getBean("myBean");

    当getBean()方法被调用时候,工厂会实例化Bean并且使用依赖注入设置Bean的属性。这样就在Spring容器中开始Bean的生命。


    2 使用上下文ApplicationContext

      ApplicationContext和BeanFactory差不大uo,两者都是载入Bean定义信息,装配Bean,根据需要分发Bean。但是ApplicationContext提供了更多功能:

    • 提供了文本信息解析工具,包括对国际化(118N)的支持。
    • 提供了载入文件资源的通用方法,如载入图片。
    • 可以像注册为监听器的Bean发送时间

    由于它提供了附加功能,几乎所有的应用系统都选择ApplicationContext而不是BeanFactory。只有在资源很少的情况下,才回考虑使用BeanFactory,如在移动设备上。

    在ApplicationContext的诸多实现中,有三个实现经常用到:

    • ClassPathXmlApplicationContext---从类路径中的xml文件载入上下文定义信息,上下文定义文件当成类路径资源。
    • FileSystemXmlApplicationContext---从文件系统中的xml文件载入上下文定义信息。
    • XmlWebApplictionContext---从web系统的xml文件载入上下文信息。

    代码例子

    ApplicationContext context = new FileSystemXmlApplicationContext("D:/beans.xml");
    
    ClassPathXmlApplicationContext context2 = new ClassPathXmlApplicationContext("beans.xml");

    FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext的区别:FileSystemXmlApplicationContext只能在制定的路径中寻找beans.xml文件,而ClassPathXmlApplicationContext 可以在整个类路径(包括jar文件)中寻找beans.xml。

    除了ApplicationContext提供的附加功能外,因为ApplicationContext与BeanFactory的另一个重要区别是关于单例Bean是如何被装在的。Bean工厂延迟载入所有Bean,知道getBean()方法被调用时Bean才被创建。应用上下文则聪明点,它会在上下文启动后预载入所有单例Bean。通过预载入单例Bean,确保当你需要的时候他们已经准备好了,你的应用不需要等待他们被创建。

  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/hlantian/p/10194575.html
Copyright © 2020-2023  润新知