• Spring学习2—Spring容器


    一、Spring容器接口关系
       容器是Spring框架的核心,Spring容器就是一个巨大的工厂。Spring容器使用Ioc(控制反转(Inversion of Control )管理所有组成应用系统的组件。

      Spring容器会使用XML解析器读取改属性值,并利用反射来创建该实现类的实例。

      Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。它们都可以代表Spring容器。Spring容器是生成Bean实例的工厂,并管理容器中的Bean。Bean是Spring管理的基本单元。

      创建BeanFactory实例时,必须使用Spring容器管理的Bean详细配置信息(XML配置文件)。XML配置文件通常使用Resource对象传入。
    Resource接口是Spring提供的资源访问接口,通过使用该接口,Spring能以简单,透明的方式访问子盘,类路径,已经网络上的资源。

    --------------------------------------------------------------------------------------------------------------------------
    二、Spring容器加载spring的配置文件方式
      A、大部分Java EE应用,在启动Web应用时自动加载Application实例。对于独立的应用程序,可通过如下方法来实例化BeanFactory。
    1.
     //搜索当前文件路径下的beans.xml文件,创建Resource对象
     InputStreamResource isr = new FileSystemResource("beans.xml");
     //以Resource对象作为参数,创建BeanFactory实例
     XmlBeanFactory factory = new XmlBeanFactory(isr);
    2.
     //搜索类加载路径,以类加载路径下的beans.xml文件创建Resource对象
     ClassPathResource res = new ClassPathResource("beans.xml");
     //以Resource对象为参数,创建BeanFactory实例
     XmlBeanFactory factory = new XmlBeanFactory(res);
    -----------------------------------------------------------
     B、ApplicationContext允许以声明式方式操作容器,无需手动创建它。可利用如ContextLoader得支持类,在Web应用启动时自动创建ApplicationContext。当然,也可以采用编程方式创建ApplicationContext.
    除了提供BeanFactory所支持的全部功能外,ApplicationContext还有如下额外功能:
    1.ApplicationContext继承MessageSource接口,因此提供国际化支持。
    2.资源访问,比如URL和文件
    3.事件机制
    4.载入多个配置文件。

     ApplicationContext经常用到的三个实现:

    1.ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息。把上下文定义文件当成类路径资源。

    2.FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息。

    3.XmlWebApplicationContext:从Web系统中的XML文件载入上下文定义信息。

     实例化Spring容器常用的两种方式:
    方法一:
    在类路径下寻找配置文件来实例化容器
    ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
    方法二:
    在文件系统路径下寻找配置文件来实例化容器
    ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:\beans.xml“});
    然后:
      
    OrderService service = (
    OrderService)ctx.getBean("personService");    
        getBean()方法的参数可以指定id属性,也可以指定name属性。
    id通常为有效的标识符(即以字母或下划线开头后面跟着字母数字或下划线)。  如:id="personServiceBean"
    name可以为非标识符。 如:name="person.server#bean“
    无论按照id属性还是name属性找到即可


    Spring的配置文件可以指定多个,可以通过String数组传入。

    --------------------------------------------------------------------------------------------------------------------------
    注意:
    默认情况下会在容器启动时初始化bean,且只实例化一次即单例模式,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean时才初始化bean。如:
        <bean id="xxx" class="cn.itcast.OrderServiceBean"
    lazy-init="true"/>                                                         
    如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“,如下:
        <beans default-lazy-init="true“ ...>

    如果想每次从容器获取bean都是新的对象,可设置:
     <bean id=“” class=“”  scope=“prototype”/>

  • 相关阅读:
    Hadoop面试
    Node.js面试题
    Node.js面试题
    [转载]最好的关系,是我懂你的不容易
    据说练就了一指禅神功的觅闻实时手机新闻网,正以每天2000+IP的用户量递增。有智能手机的可以当场进行体验,没有的就算了哈
    刚6瓶啤酒4两56度白酒下肚,居然20分钟做了一手机版网站 !
    Android:刚6瓶啤酒4两56度白酒下肚,居然20分钟做了一手机版网站 !
    IT人生的价值和意义 感觉真的有了
    (Android+IOS)正在做一个新闻App,做的差不多了,听听大家的建议 (图)
    (Android 即时通讯) [悬赏],无论是谁发现一个漏洞奖励人民币1000元!
  • 原文地址:https://www.cnblogs.com/kabi/p/5182025.html
Copyright © 2020-2023  润新知