在Spring框架中,一個bean僅用於一個特定的屬性,這是提醒其聲明為一個內部bean。內部bean支持setter注入“property”和構造器注入"constructor-arg“。
下麵來看看一個詳細的例子,演示使用 Spring 內部 bean 。
package com.xuhuhu.common; public class Customer { private Person person; public Customer(Person person) { this.person = person; } public void setPerson(Person person) { this.person = person; } @Override public String toString() { return "Customer [person=" + person + "]"; } }
package com.xuhuhu.common; public class Person { private String name; private String address; private int age; //getter and setter methods @Override public String toString() { return "Person [address=" + address + ", age=" + age + ", name=" + name + "]"; } }
很多時候,可以使用 'ref' 屬性來引用“Person” bean到“Customer” Bean,person的屬性如下:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="CustomerBean" class="com.xuhuhu.common.Customer"> <property name="person" ref="PersonBean" /> </bean> <bean id="PersonBean" class="com.xuhuhu.common.Person"> <property name="name" value="zaixian" /> <property name="address" value="address1" /> <property name="age" value="28" /> </bean> </beans>
在一般情況下,引用這樣也沒有問題,但由於“zaixian” persion bean 只用於Customer bean,這是更好地聲明 “zaixian” person 作為一個內部 bean,如下:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="CustomerBean" class="com.xuhuhu.common.Customer"> <property name="person"> <bean class="com.xuhuhu.common.Person"> <property name="name" value="zaixian" /> <property name="address" value="address1" /> <property name="age" value="28" /> </bean> </property> </bean> </beans>
內部 bean 也支持構造器注入如下:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="CustomerBean" class="com.xuhuhu.common.Customer"> <constructor-arg> <bean class="com.xuhuhu.common.Person"> <property name="name" value="zaixian" /> <property name="address" value="address1" /> <property name="age" value="28" /> </bean> </constructor-arg> </bean> </beans>
注意:
id 或 name 值在bean類是沒有必要以一個內部 bean 呈現,它會簡單地忽略Spring容器。
執行結果:
package com.xuhuhu.common; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main( String[] args ) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"}); Customer cust = (Customer)context.getBean("CustomerBean"); System.out.println(cust); } }
輸出結果:
Customer [person=Person [address=address1, age=28, name=zaixian]]
上一篇:
Spring bean加載多個配置檔
下一篇:
Spring Bean作用域實例