7.5.9 组合属性
Spring还支持组合属性的方式。例如,使用配置文件为形如foo.bar.name的属性设置参数值。为Bean的组合属性设置参数值时,除最后一个属性之外,其他属性值都不允许为null
例如有如下的Bean类
项目结构
| 1 | E:\workspace_QingLiangJiJavaEEQiYeYingYongShiZhang5\composite | 
ExampleBean.java
| 1 | package org.crazyit.app.service; | 
上面Example Bean里提供了一个person成员变量,该person变量的类型是Person类, Person是个Java类, Person类里有一个String类型的name属性(有name实例变量及对应的getter, setter方法),则可以使用组合属性的方式为Example Bean的person的name指定值。配置文件如下。
beans.xml
| 1 | 
 | 
通过使用这种组合属性的方式, Spring允许直接为Bean实例的复合类型的属性指定值。但这种设置方式有一点需要注意:使用组合属性指定参数值时,除了最后一个属性外,其他属性都不能为null,否则将引发NullPointerException异常。例如,上面配置文件为person.name指定参数值,则example Bean的getPerson()方法的返回值一定不能为null。
对于这种注入组合属性值的形式,每个<property>元素依然是让Spring执行一次setter方法,但它不再直接调用该Bean的setter方法,而是需要先调用getter方法,然后再去调用setter方法。例如上面的粗体字配置代码,相当于让Spring执行如下代码:exampleBean.getperson().setName("孙悟空");
也就是说,组合属性只有最后一个属性才调用setter方法,前面各属性实际上对应于调用getter方法—这也是前面属性都不能为null的缘由。
例如有如下配置片段:
| 1 | <bean id="a" class="org.crazyit.app.service.AClass"> | 
上面的组合属性注入相当于让Spring执行如下代码:
| 1 | a.getFoo().getBar().getX().setY("yyy"); | 
原文链接: 7.5.9 组合属性