public class Person { //儿子,该属性是son类的一个实例 private Son son; private String age; public Son getSon() { return son; } public void setSon(Son son) { this.son = son; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
public class Son { private String age; public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
<bean id="person" class="application.Person"> <property name="age" value="20"></property> <!-- 该属性是Son类的一个实例 --> <property name="son"> <bean class="application.Son"> <property name="age" value="16"></property> </bean> </property> </bean>
public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("config/applicationContext.xml"); Person person=(Person)context.getBean("person"); System.out.println("person的年龄为:"+person.getAge()); System.out.println("person的son的年龄为:"+person.getSon().getAge()); }
person的年龄为:20 person的son的年龄为:16
配置方式二:通过PropertyPathFactoryBean类,可以注入某个实例的属性值
<bean id="son1" class="application.Son"> <!-- 将person类中son的age属性输入到son1中age属性 --> <property name="age"> <bean id="person.son.age" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/> </property> </bean>
public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("config/applicationContext.xml"); Son son1=(Son)context.getBean("son1"); System.out.println(son1.getAge()); } 结果为:16
配置方式三:使用PropertyPathFactoryBean必须指定以下两个属性。
1.targetBeanName:用于指定目标bean,确定获取哪个bean的属性值。
2.propertyPath:用于指定属性,确定获取目标bean的哪个属性值,此处的属性可直接使用 属性表达式。可以将基本数据类型的属性值定义成bean实例。
<bean id="son2" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> <property name="targetBeanName"> <value>person</value> </property> <property name="propertyPath"> <value>son</value> </property> </bean>
public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("config/applicationContext.xml"); Son son2=(Son)context.getBean("son2"); System.out.println(son2.getAge()); } 结果:16