注入参数详解:null值和级联属性

可以使用专用的<null/>元素标签为Bean的字符串或其他对象类型的属性注入null值。

和Struts,Hiberante等框架一样,Spring支持级联属性的配置。

可以如下设置null值

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <!-- 通过构造方法来配置Bean的属性 -->
  6. <bean id="car" class="logan.spring.study.Car">
  7. <constructor-arg value="Audi" index="0"></constructor-arg>
  8. <constructor-arg value="Shanghai" index="1"></constructor-arg>
  9. <constructor-arg value="3000000" index="2" type="double"></constructor-arg>
  10. </bean>
  11. <bean id="car2" class="logan.spring.study.Car">
  12. <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
  13. <constructor-arg type="java.lang.String">
  14. <value><![CDATA[<Shanghai>]]></value>
  15. </constructor-arg>
  16. <constructor-arg type="int">
  17. <value>250</value>
  18. </constructor-arg>
  19. </bean>
  20.  
  21. <bean id="person" class="logan.spring.study.Person">
  22. <property name="name" value="Tom"></property>
  23. <property name="age" value="24"></property>
  24. <property name="car">
  25. <bean class="logan.spring.study.Car">
  26. <constructor-arg value="Ford"></constructor-arg>
  27. <constructor-arg value="Changan"></constructor-arg>
  28. <constructor-arg value="20000000" type="double"></constructor-arg>
  29. </bean>
  30. </property>
  31. </bean>
  32.  
  33. <bean id="person2" class="logan.spring.study.Person">
  34. <constructor-arg value="Jerry"></constructor-arg>
  35. <constructor-arg value="25"></constructor-arg>
  36. <!--
  37. <constructor-arg ref="car"></constructor-arg>
  38. -->
  39. <constructor-arg><null/></constructor-arg>
  40. </bean>
  41.  
  42. </beans>

输出结果

  1. 五月 19, 2017 8:54:47 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
  2. 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3eb07fd3: startup date [Fri May 19 20:54:47 CST 2017]; root of context hierarchy
  3. 五月 19, 2017 8:54:47 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  4. 信息: Loading XML bean definitions from class path resource [applicationContext.xml]
  5. HelloWorld's Constructor...
  6. HelloWorld's Constructor...
  7. Car [brand=Audi, corp=Shanghai, price=3000000.0, maxspeed=0]
  8. Car [brand=Baoma, corp=<Shanghai>, price=0.0, maxspeed=250]
  9. Person [name=Jerry, age=25, car=null]

看下面级联属性的赋值

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <!-- 通过构造方法来配置Bean的属性 -->
  6. <bean id="car" class="logan.spring.study.Car">
  7. <constructor-arg value="Audi" index="0"></constructor-arg>
  8. <constructor-arg value="Shanghai" index="1"></constructor-arg>
  9. <constructor-arg value="3000000" index="2" type="double"></constructor-arg>
  10. </bean>
  11. <bean id="car2" class="logan.spring.study.Car">
  12. <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
  13. <constructor-arg type="java.lang.String">
  14. <value><![CDATA[<Shanghai>]]></value>
  15. </constructor-arg>
  16. <constructor-arg type="int">
  17. <value>250</value>
  18. </constructor-arg>
  19. </bean>
  20.  
  21. <bean id="person" class="logan.spring.study.Person">
  22. <property name="name" value="Tom"></property>
  23. <property name="age" value="24"></property>
  24. <property name="car">
  25. <bean class="logan.spring.study.Car">
  26. <constructor-arg value="Ford"></constructor-arg>
  27. <constructor-arg value="Changan"></constructor-arg>
  28. <constructor-arg value="20000000" type="double"></constructor-arg>
  29. </bean>
  30. </property>
  31. </bean>
  32.  
  33. <bean id="person2" class="logan.spring.study.Person">
  34. <constructor-arg value="Jerry"></constructor-arg>
  35. <constructor-arg value="25"></constructor-arg>
  36. <constructor-arg ref="car"></constructor-arg>
  37. <property name="car.maxspeed" value="250"></property>
  38. </bean>
  39.  
  40. </beans>

下面是输出结果,注意:属性需要先初始化以后才可以为级联属性赋值,否则会有异常,和Struts2不同。

  1. 五月 19, 2017 9:17:51 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
  2. 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3eb07fd3: startup date [Fri May 19 21:17:51 CST 2017]; root of context hierarchy
  3. 五月 19, 2017 9:17:51 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  4. 信息: Loading XML bean definitions from class path resource [applicationContext.xml]
  5. HelloWorld's Constructor...
  6. HelloWorld's Constructor...
  7. Car [brand=Audi, corp=Shanghai, price=3000000.0, maxspeed=250]
  8. Car [brand=Baoma, corp=<Shanghai>, price=0.0, maxspeed=250]
  9. Person [name=Jerry, age=25, car=Car [brand=Audi, corp=Shanghai, price=3000000.0, maxspeed=250]]

Spring入门第四课的更多相关文章

  1. Kotlin入门第四课:简单工厂模式

    Kotlin基础知识的学习,请参考之前的文章: Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android ...

  2. Linux零基础入门第四课

    根据直播讲义整理的内容,从第四课开始.前三课的内容若后面有精力会一并整理进来. 文件的基本操作(上) 创建.删除.复制.移动和重命名 touch命令创建文件 语法 >$ touch file0 ...

  3. Spring入门第六课

    XML配置里的Bean自动装配 Spring IOC容器可以自动装配Bean.需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式 ByType(根据类型自动装配):若I ...

  4. Spring入门第五课

    集合属性 在Spring中可以通过一组内置的xml标签(如:<list>,<set>,<map>)来配置集合属性. 配置java.util.List类型的属性,需要 ...

  5. Spring入门第三课

    属性注入 属性注入就是通过setter方法注入Bean的属性值或依赖的对象. 属性植入使用<property>元素,使用name属性指定Bean的属性名称,value属性或者<val ...

  6. Spring入门第十三课

    通过FactoryBean来配置Bean package logan.spring.study.factoryBean; public class Car { private String brand ...

  7. Spring入门第十一课

    IOC容器中Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过 ...

  8. Spring入门第十课

    Spring表达式语言:SpEL Spring表达式语言(简称SpEL)是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于EL:SpEL使用#{...}作为定界符,所有在大括号中的字符都 ...

  9. Spring入门第八课

    看如下代码 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...

随机推荐

  1. 319 Python基础之格式化输出、逻辑运算符、编码、in not in、while else、

    一.格式化输出 占位符%,字符串占位符%s,数字占位符%d 第一种name = input('姓名') age = input('年龄') hobby = input ("爱好") ...

  2. Codeforces Round #335 (Div. 2) C. Sorting Railway Cars

    C. Sorting Railway Cars time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  3. Spark- 求最受欢迎的TopN课程

    数据库操作工具类 package com.rz.mobile_tag.utils import java.sql.{Connection, DriverManager, PreparedStateme ...

  4. css3 点击爆炸下落

    代码][JavaScript]代码    $(document).ready(function() {             // Generate the clips. In this case ...

  5. PHP不用第三变量交换2个变量的值的解决方法

    以前做过一道php面试题是这样的:不使用第三个变量实现交换两个变量的值.一般都是借助第三个中间变量来实现原来两个变量的值交换,但是这道题却要求不能使用中间变量,这对于初学者来说也算是一个难题了.网上找 ...

  6. 分布式系统的Raft算法——在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新 意味着还是可能丢数据!!!

    过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑. 来自Stanford的新的分布式协议研究称为R ...

  7. hibernate 一级缓存、二级缓存

    一级缓存:——session一旦关掉就没有了.使用 load和get加载对象的时候,会自动加载到缓存,读取的也会读缓存. public void huancun(){ Session session= ...

  8. Havel-Hakimi定理(握手定理)

    Havel-Hakimi定理(握手定理) 由非负整数组成的非增序列s(度序列):d1,d2,…,dn(n>=2,d1>=1)是可图的,当且仅当序列: s1:d2 – 1,d3 – 1,…, ...

  9. (转)#ifndef的用法

    原文链接:http://wenku.baidu.com/link?url=c4doqVo3U429RkwTN5eaJIfD2rEu-1bLKKQXuqO8drmL359PhUjVmzC7P94wBY9 ...

  10. linux命令学习笔记(50):crontab命令

    前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...