?
?
引用其它Bean
?
一、構造器注入方式:
(1)通過” <constructor-arg>”標簽的ref屬性來引用其他Bean
?
(2)通過” <constructor-arg>”標簽的子<ref>標簽來引用其他Bean,使用bean屬性來指定引用的Bean
二、setter注入方式:
(1)通過” <property>”標簽的ref屬性來引用其他Bean
(2)通過” <property>”標簽的子<ref>標簽來引用其他Bean,使用bean屬性來指定引用的Bean
?
?
public class HelloDiBean implements HelloApi{ private HelloApi helloApi; private HelloApi helloApi2; public HelloDiBean(HelloApi helloApi){ this.helloApi = helloApi; } public void sayHello() { helloApi.sayHello(); helloApi2.sayHello(); } public HelloApi getHelloApi2() { return helloApi2; } public void setHelloApi2(HelloApi helloApi2) { this.helloApi2 = helloApi2; } }
?配置注入引用其他的bean
?
<!-- 引用其他的bean進行注入 --> <bean id="helloBean" class="com.dilist.HelloDiBean"> <constructor-arg index="0" ref="mapBean" /> <property name="helloApi2"> <ref bean="properBean" /> </property> </bean>?
其他引用bean 的高級用法:
?
/** * Spring還提供了另外兩種更高級的配置方式,<ref local=””/>和<ref parent=””/>: * (1)<ref local=””/>配置方式:用于引用通過<bean id=”beanName”>方式中通過id屬性指定的Bean, * 它能利用XML解析器的驗證功能在讀取配置文件時來驗證引用的Bean是否存在。 * 因此如果在當前配置文件中有相互引用的Bean可以采用<ref local>方式從而如果配置錯誤能在開發調試時就發現錯誤。 * (2)<ref parent=””/>配置方式:用于引用父容器中的Bean,不會引用當前容器中的Bean, * 當然父容器中的Bean和當前容器的Bean是可以重名的,獲取順序是直接到父容器找。 */ public class HelloHigh implements HelloApi{ private HelloApi helloApi; private HelloApi helloApi2; public HelloHigh(HelloApi helloApi){ this.helloApi = helloApi; } public void sayHello() { helloApi.sayHello(); System.out.println(""); helloApi2.sayHello(); } public HelloApi getHelloApi2() { return helloApi2; } public void setHelloApi2(HelloApi helloApi2) { this.helloApi2 = helloApi2; } }?
helloworld.xml:
?
<!-- 注入properties類型 --> <bean id="properBean" class="com.dilist.HelloDiProperties"> <property name="properties"> <props value-type="int" merge="default"><!-- 雖然指定value-type,但是不起作用 --> <prop key="1">1sss</prop> <!-- Properties 建和值都是String類型 --> <prop key="2">2</prop> </props> </property> <property name="properties2"> <value> <!-- 分隔符可以是 “換行”、“;”、“,” 不建議該方式,優先選擇第一種方式 --> 1=11 2=22;<!-- 這樣的分隔符好像沒用 --> 3=33, 4=44 </value> </property> </bean> <!-- Spring還提供了另外兩種更高級的配置方式,<ref local=””/>和<ref parent=””/> --> <bean id="helloHigh" class="com.dilist.HelloHigh"> <constructor-arg index="0"><ref local="properBean" /></constructor-arg> <property name="helloApi2"><ref parent="properBean" /></property> </bean>?
?
helloworldParent.xml:
?
<!-- 注入properties類型 --> <bean id="properBean" class="com.dilist.HelloDiProperties"> <property name="properties"> <props value-type="int" merge="default"><!-- 雖然指定value-type,但是不起作用 --> <prop key="1">2dss</prop> <!-- Properties 建和值都是String類型 --> <prop key="2">3aas</prop> </props> </property> <property name="properties2"> <value> <!-- 分隔符可以是 “換行”、“;”、“,” 不建議該方式,優先選擇第一種方式 --> 1=111 2=222;<!-- 這樣的分隔符好像沒用 --> 3=333, 4=444 </value> </property> </bean>?
調用處 利用加載父容器的方式,注入父容器中的Bean:
?
?
@Test public void testDiBeanHigh() { // 以classes為根目錄算起 // 讀取配置文件實例化一個Ioc容器 // 初始化父容器 ApplicationContext parentContext = new ClassPathXmlApplicationContext( "helloworldParent.xml"); // 初始化當前容器 ApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "helloworld.xml" }, parentContext); // 構造 + setter注入 引用其他的bean注入 HelloApi helloApi = context.getBean("helloHigh", HelloApi.class); helloApi.sayHello(); }
已有 0 人發表留言,猛擊->>這里<<-參與討論
ITeye推薦