b05-03 spring注入参数详解(精通Spring 4.x)

本篇内容:

  • 1、参数注入字面值
  • 2、参数引用其他Bean
  • 3、参数注入内部Bean
  • 4、参数注入null
  • 5、参数注入级联属性
  • 6、参数注入集合类型数据:List,Set,Map,集合合并,通过util命名空间

一、字面值

  • 可用字符串表示的值,可用通过<value>元素标签进行注入,默认情况下基本数据类型及封装类,String等类型都可用采用字面值注入方式。
  • Spring容器在内部为字面值提供了编辑器,可用将字符表示的字面值转换为内部变量的相应类型。Spring允许用户注册自定义的编辑器,处理其他类型属性注入时的转换工作。
<bean id="car" class="com.demo.Car">
        <property name="title">
            <value><![CDATA[雷克萨斯 &ES]]></value>
        </proprtey>
    </bean>
  • 说明:
  • xml标签:<![CDATA[ ]]>:让xml解析器将标签中的字符串当成普通文本对待,防止特殊字符串对xml格式造成破坏

xml在有5个特殊字符:&,<,>,“,'

  • 如果配置文件中的注入值包含特殊字符可以采用xml特殊符号标签,或采用转义字符

二、引用其他Bean

  • SpringIoc容器中定义的Bean可以相互引用。

1、引用使用:

    <bean id="data" class="com.lang.String"/>
    
   <bean id="car" class="com.demo.Car">
       <property name="title">
           <ref bean="data"/>
       </property>
   </bean>
   

说明:

  • ref bean="data":给当前bean引用id为data的对象做为当前title属性

2、<ref>元素

有3个属性引用容器中其他的Bean

  • 1、bean:通过该属性可以引用当前容器或父容器中的Bean
  • 2、local:只能引用同一配置文件中定义的Bean
  • 3、parent:引用父容器中的Bean

说明:

  • 三个属性根据不同的场景使用不同的属性

三、内部Bean

  • 内部Bean和java中匿名内部类相似,没有名字不能被其他bean引用,只能在声明处为外部Bean提供实例注入。
    <bean id="car" class="com.demo.Car">
        <property name="title">
            <bean class="com.lang.String" />
        </property>
    </bean>
  • 内部Bean提供的属性会被忽略,scope默认为Prototype类型

四、null值

  • 使用<null>元素标签给属性注入null值
    <property name="title" <null/></property>
  • 此配置等同于bean#setTitle(null)

五、级联属性

  • 和Struts、HIbernate框架一样Spring支持级联属性

1、定义实体对象

public class Car{
    private String title;
    
    public void setTitle(String title){
        this.title = title;
    }
}
public class Person{
    private Car car = new Car();
    
    public void setCar(Car car){
        this.car=car;
    }
}

2、配置文件

    <bean id="person" class="">
    
        <property name="car.title" value="雷克萨斯" />
    </bean>

说明:

  • name="car.title":提供了一个Car实例对象,并设置Car中的title属性为对应value
注意:
  • Spring没有级联属性层级限制,前提级联中对象不能为空。

六、集合类型属性

  • java中常用的集合为list,set,Map,Properties

6.1、list集合

  • 如果一个属性类型为String[ ],int [ ] ,List<String> 都可以使用list方式注入数据
  • 实体方法:public void setTitle(List<String> title)

配置文件

    <bean id="" class="">
        <property name="title">
            <list>
                <value>xxx</value>
                <value>xxx</value>
            </list>
       </property>
    </bean>          
  • 说明:
  • list中的属性可以使用value也可以使用ref方式注入

6.2、set集合

  • 配置文件
    <bean id="" class="">
        <property name="title">
            <set>
                <value>xxx</value>
                <value>xxx</value>
            </set>
       </property>
    </bean>   
  • 说明:
  • set集合与list集合的使用基本一致,而本质的区别还是java中list和set集合的区别

6.3、Map集合

  • 配置文件
<bean id="" class="">
        <property name="title">
            <map>
                <entity>
                    <key><value>yyy</value></key>
                    <value>xxx</value>
                </entity>
                <entity>
                    <key><value>yyy</value></key>
                    <value>xxx</value>
                </entity>
            </map>
       </property>
    </bean>   

说明:

  • 一个entity标签代表map中的一个元素
  • 如果map元素的建和值都是对象,则采用ref标签进行引用

6.4、properties

  • Properties类型可以理解为Map类型的特例,Map中键和值可以是任何类型,而Properties的键和值只能是String类型。

1、定义方法

public void setTitle(Properties title)

2、配置文件

    <bean id="" class="">
        <property name="title">
            <props>
                <prop key="yyy">yyy</prop>
                <prop key="xxx">xxx</prop>
            </props>
       </property>
    </bean>  
说明:
  • properties没有value元素标签。

6.5、集合合并

  • Spring支持集合合并功能,允许子Bean继承父bean的同名属性集合元素。并将子Bean中配置的集合属性和父Bean中集合属性的同名属性值合并起来作为最终Bean的属性值
 <bean id="parent" abstract="true" class="">
        <property name="ZZ">
            <set>
                <value>xxx</value>
                <value>yyy</value>
           </set>
       </property>
    </bean>
    
    <bean id="child" parent="parent">
        <property name="ZZ">
            <set merge="true">
                <value>YYY</value>
                <value>XXX</value>
             </set>
         </property>
     </bean>

说明:

*子配置文件中merge="true":属性用于指定子Bean和父Bean中同名属性进行合并。如果设置为false则不会进行合并
最终子Bean集合中有4个元素

6.6、通过util命名空间配置集合Bean

  • 如果配置一个集合类型的Bean而不是一个集合类型的属性,可以通过util配置

1、list集合

    <util:list id="" list-class="java.util.LinkedList">
        <value>xxx</value>
        <value>yyy</value>
    </util:list>  

2、set集合

    <util:set id="">
        <value>xxx</value>
        <value>xxx</value>
    </utils:set>
    

3、map集合

    <util:map id="">
        <entity key="" value="" />
        <entity key="" value="" />
   </util:map>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,248评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,681评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,443评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,475评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,458评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,185评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,451评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,112评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,609评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,083评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,163评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,803评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,357评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,357评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,590评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,636评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,925评论 2 344

推荐阅读更多精彩内容