zoukankan      html  css  js  c++  java
  • 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,确保当你需要的时候他们已经准备好了,你的应用不需要等待他们被创建。

  • 相关阅读:
    MyBatis执行sql的整个流程
    Ftp传输:向linux服务器上传文件时“550 Permission denied.”错误问题解决
    SpringBoot框架:两个方法同时调用时父方法使内部方法的DataSource注解失效的解决办法
    SpringBoot框架:通过AOP和自定义注解完成druid连接池的动态数据源切换(三)
    SpringBoot框架:配置文件application.properties和application.yml的区别
    SpringBoot框架:'url' attribute is not specified and no embedded datasource could be configured问题处理
    bash脚本打印字符串一个空格的内容
    gethostbyname的线程安全
    算法工程师的职业规划
    理解Deep Link & URI Schemes & Universal Link & App Link
  • 原文地址:https://www.cnblogs.com/hlantian/p/10194575.html
Copyright © 2011-2022 走看看