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 组合属性