zoukankan      html  css  js  c++  java
  • 3、Spring4之Bean 配置的细节


    1). 若字面值中包括特殊字符,则能够使用 value 节点的 <![CDATA[]]> 把字面值包裹起来。

         <constructor-arg>
              <!-- 若 value 属性值中包括特殊字符串, 则能够使用 value 子节点来注入属性值. value 子节点中能够使用 CDATA -->
              <value><![CDATA[Zheng <><> zhou]]></value>
         </constructor-arg>

    2). 在 Bean 的配置文件里, 能够通过 <ref> 元素或 ref  属性为 Bean 的属性或构造器參数指定对 Bean 的引用.

         <bean id="dao" class="com.atguigu.spring.ioc.ref.Dao">
              <property name="database" value="DB2"></property>
         </bean>

         <bean id="service2" class="com.atguigu.spring.ioc.ref.Service">
              <property name="dao" ref="dao"></property>
         </bean>
         ------------------------------------------------------------------------------
         解析:<property name="dao" ref="dao"></property> 的作用为:
              Dao dao = (Dao)ctx.getBean("dao");
              Service service = (Service)ctx.getBean("service2");
              service.setDao(dao);

    3). 能够在属性或构造器里包括 Bean 的声明, 这种 Bean 称为内部 Bean

         <bean class="com.atguigu.spring.ioc.ref.Service" id="service">
              <property name="dao">
                   <bean class="com.atguigu.spring.ioc.ref.Dao">
                        <property name="database" value="MySQL"></property>
                   </bean>

              </property>
         </bean>

         解释:类似于下面代码,但 dao 的这个 bean 事实上是没有 id 的,也不能被其它的 bean 来引用。也不能单独从 IOC 容器中获取。

              <bean class="com.atguigu.spring.ioc.ref.Dao" id="dao">
                   <property name="database" value="MySQL"></property>
              </bean>

              <bean class="com.atguigu.spring.ioc.ref.Service" id="service">
                   <property name="dao" ref="dao"></property>
              </bean>         

              ①. 当 Bean 实例只给一个特定的属性使用时, 能够将其声明为内部 Bean.
                    内部 Bean 声明直接包括在 <property> 或 <constructor-arg> 元素里, 不须要设置不论什么 id 或 name 属性
              ②. 内部 Bean 不能使用在不论什么其它地方

    4). 能够使用专用的 <null/> 元素标签为 Bean 的字符串或其他对象类型的属性注入 null 值

         <bean id="car6" class="com.atguigu.spring.ioc.Car">
              <!-- 为 maxSpeed 赋值为 null, 而 value="null" 是把 null 这个字符串赋给了相应的属性 -->
              <property name="corp"><null/></property>
         </bean>


    5). Spring 支持级联属性的配置。

         <bean id="action3" class="com.atguigu.spring.ioc.ref.Action">
              <property name="service" ref="service2"></property>

              <!-- 为 service 的 dao 的 database 赋值为 ORACLE -->
              <property name="service.dao.database" value="ORACLE"></property>
         </bean>

    6). 配置 java.util.List 类型的属性, 须要指定 <list>  标签, 在标签里包括一些元素.
         这些标签能够通过 <value> 指定简单的常量值, 通过 <ref> 指定对其它 Bean 的引用.
         通过<bean> 指定内置 Bean 定义.
         通过 <null/> 指定空元素. 甚至能够内嵌其它集合.

         <property name="cars">
              <!-- 通过 list 指定集合属性的值. 但 list 是一个内部 list, 不能被其它的 bean 引用.  -->
              <list>
                   <!-- ref 直接指向已有的 bean -->
                   <ref bean="car"/>
                   <ref bean="car2"/>
                   <ref bean="car3"/>
                   <!-- bean 声明内部 bean -->
                   <bean class="com.atguigu.spring.ioc.Car">
                        <property name="brand" value="BMW"></property>
                        <property name="corp" value="HuaChen"></property>
                        <property name="maxSpeed" value="300"></property>
                        <property name="price" value="800000"></property>
                   </bean>
              </list>
         </property>

    7).  能够使用 util schema 里的集合标签定义独立的集合 Bean. 须要注意的是, 必须在 <beans> 根元素里加入 util schema 定义

    ①. 导入 util 命名空间

    <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:util="http://www.springframework.org/schema/util"
         xmlns:p="http://www.springframework.org/schema/p"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">


    ②. 定义集合 Bean

         <util:list id="cars">
              <!-- ref 直接指向已有的 bean -->
              <ref bean="car"/>
              <ref bean="car2"/>
              <ref bean="car3"/>

              <!-- bean 声明内部 bean -->
              <bean class="com.atguigu.spring.ioc.Car">
                   <property name="brand" value="BMW"></property>
                   <property name="corp" value="HuaChen"></property>
                   <property name="maxSpeed" value="300"></property>
                   <property name="price" value="800000"></property>
              </bean>
         </util:list>

    8). 配置 Map Bean

         <util:map id="config">
              <entry key="user" value="root"></entry>
              <entry key="password" value="1230"></entry>
              <entry key="driverClass" value="com.mysql.jdbc.Driver"></entry>
              <entry key="jdbcUrl" value="jdbc:mysql:///test"></entry>

         </util:map>

    9). 配置 Properties 的属性

         <property name="properties">
              <props>
                   <prop key="hibernate.hbm2ddl.auto">update</prop>
                   <prop key="b">B</prop>
                   <prop key="c">C</prop>
                   <prop key="d">D</prop>
              </props>

         </property>

    10). 使用 p 命名空间简化 bean 的属性配置:

         ①. 导入  p 的命名空间

         <beans xmlns="http://www.springframework.org/schema/beans"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:util="http://www.springframework.org/schema/util"
              xmlns:p="http://www.springframework.org/schema/p"
              xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                   http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">


         ②. 使用 p 命名空间进行配置

         <bean id="car7" class="com.atguigu.spring.ioc.Car"
                   p:brand="Mazda"
                   p:corp="ChangAn"
                   p:maxSpeed="220"
                   p:price="200000"
    />
  • 相关阅读:
    Linux系统介绍(二)文件系统结构
    为Docker Swarm添加调度策略
    Docker 三剑客之 Docker Swarm
    Hadoop中文文档
    hadoop 学习笔记:mapreduce框架详解
    Java进阶-- GUI
    ceph(8)--关于Ceph PGs
    今天在学习NTP时发现了2个网站
    开始学红帽的RHCE课堂有2次课了,要记下自己的学习经历
    Switch能否用string做参数
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5058298.html
Copyright © 2011-2022 走看看