zoukankan      html  css  js  c++  java
  • 5. Spring 通过 XML 配置 bean (进阶)

    1. 设置 bean 的作用域

      当通过 Spring IOC 容器创建 bean 实例的时候,不仅可以完成 bean 的实例化,也可以为 bean 指定特定的作用域,Spring 支持以下 5 种作用域:

        1. singleton:单例模式。在整个 IOC 容器中,使用 singleton 定义的 bean 实例将只有一个。

        2. prototype:原型模式,每次通过容器的 getBean 方法获取 prototype 定义的 Bean 时,都将产生一个新的 Bean 实例

        3. request:对于每次 HTTP 请求,使用 request 定义的 Bean 都将产生一个新实例,即每次 HTTP 请求将会产生不同的Bean实例。只有在 Web 应用中使用 Spring 时,该作用域才有效

        4. session:对于每次 HTTP Session,使用 session 定义的 Bean 都将产生一个新实例。同样只有在 Web 应用中使用 Spring 时,该作用域才有效

        5. globalsession:每个全局的 HTTP Session,使用 session 定义的 Bean 都将产生一个新实例。典型情况下,仅在使用 portlet context 的时候有效。同样只有在 Web 应用中使用 Spring 时,该作用域才有效

    2. 使用内部 bean

      在配置 bean 的时候,当一个 bean 中包含另一个 bean 的时候,我们除了可以用引用的办法,还可以使用内部 bean 来进行配置。下面附上代码:

    使用内部bean

      这里要注意的是,定义的内部 bean 不能被外部访问(所以叫做内部 bean)

    3. 自动装配

      在 bean 节点中配置 autowire 属性,可以使用自动装配的功能。可以通过 Type 和 Name 两种方式获取资源

      比如,我在 Person 类中定义了一个 Address 属性,在配置的时候,配置一个 Address 的 bean,然后配置一个 Person 的 bean,其中,Person 中的 Address 属性不给赋值,我们要通过自动装配的方式来给它赋值。方式就是,在 Person 这个 bean 的配置属性中加入一个 autowire 属性,值为 “byType” ,这样,IOC 容器就能根据 Person 中属性的类型来自动的进行属性的装配。下面,附上代码:

      

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        <!-- 添加 Address 和 Person -->
        <bean id="address" class="com.spring.xmlBean.Address" >
            <constructor-arg name="city" value="日照"></constructor-arg>
            <constructor-arg name="province" value="山东"></constructor-arg>
        </bean>
        
        <bean id="person" class="com.spring.xmlBean.Person" autowire="byType">
            <property name="name" value="Little-Koala"></property>
            <property name="age" value="18"></property>
        </bean>
    </beans>
    autowire 自动装配

      这里我们用的是 byType 的方式,这里需要注意的是,如果在 IOC 容器中匹配到了多个 bean,那么 IOC 容器将会抛出异常,所以此时必须保证容器里面只能有一个能够匹配的 bean。

      还有 byName 的方式,这种方式是通过匹配属性名和 bean 的 id 名的方式,这种方式有一个缺点,就是要假定 bean 的名字和要自动装配的属性的名字是相同的。

      除了上面两种方式,还有一种 constructor 方式,就是 IOC 自动获取可以加入要配置的 bean 的构造器中的 bean。感觉这种方式不太好用,了解一下即可

  • 相关阅读:
    MySQL 卸载
    Mysql(压缩包)下载与安装
    sqlserver一次性修改多条
    mysql一些操作
    SQL函数集合
    js时间转换相关
    easyui grid中翻页多选方法
    easyui combobox筛选(拼音)
    wpf图片切换,幻灯效果
    openfire搭建IM
  • 原文地址:https://www.cnblogs.com/zyx1301691180/p/7668087.html
Copyright © 2011-2022 走看看