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

  • 相关阅读:
    mac登录界面的背景壁纸图片位置
    【转载】MAC系统修改帐号短名和个人文件夹名称
    ios 6.x系统UITextView 设置为密码输入无效的问题
    一个简单的果冻弹动动画
    ios中的自动释放池
    ios 静态库联合调试
    【转】IOS制作静态库
    objective-c中为什么不能实现多重继承及如何变通实现
    回调中释放自己会不会导致崩溃?
    【转载】Objective-C runtime 消息机制
  • 原文地址:https://www.cnblogs.com/hlantian/p/10194575.html
Copyright © 2020-2023  润新知