跟我學(xué)Spring3 學(xué)習(xí)筆記一
跟我學(xué)Spring3 學(xué)習(xí)筆記二
跟我學(xué)Spring3 學(xué)習(xí)筆記三
跟我學(xué)Spring3 學(xué)習(xí)筆記四
跟我學(xué)Spring3 學(xué)習(xí)筆記五 注入
?
?
引用其它Bean
?
一、構(gòu)造器注入方式:
(1)通過(guò)” <constructor-arg>”標(biāo)簽的ref屬性來(lái)引用其他Bean
?
(2)通過(guò)” <constructor-arg>”標(biāo)簽的子<ref>標(biāo)簽來(lái)引用其他Bean,使用bean屬性來(lái)指定引用的Bean
二、setter注入方式:
(1)通過(guò)” <property>”標(biāo)簽的ref屬性來(lái)引用其他Bean
(2)通過(guò)” <property>”標(biāo)簽的子<ref>標(biāo)簽來(lái)引用其他Bean,使用bean屬性來(lái)指定引用的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進(jìn)行注入 -->
<bean id="helloBean" class="com.dilist.HelloDiBean">
<constructor-arg index="0" ref="mapBean" />
<property name="helloApi2">
<ref bean="properBean" />
</property>
</bean>
?
其他引用bean 的高級(jí)用法:
?
/**
* Spring還提供了另外兩種更高級(jí)的配置方式,<ref local=””/>和<ref parent=””/>:
* (1)<ref local=””/>配置方式:用于引用通過(guò)<bean id=”beanName”>方式中通過(guò)id屬性指定的Bean,
* 它能利用XML解析器的驗(yàn)證功能在讀取配置文件時(shí)來(lái)驗(yàn)證引用的Bean是否存在。
* 因此如果在當(dāng)前配置文件中有相互引用的Bean可以采用<ref local>方式從而如果配置錯(cuò)誤能在開(kāi)發(fā)調(diào)試時(shí)就發(fā)現(xiàn)錯(cuò)誤。
* (2)<ref parent=””/>配置方式:用于引用父容器中的Bean,不會(huì)引用當(dāng)前容器中的Bean,
* 當(dāng)然父容器中的Bean和當(dāng)前容器的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> <!-- 分隔符可以是 “換行”、“;”、“,” 不建議該方式,優(yōu)先選擇第一種方式 -->
1=11
2=22;<!-- 這樣的分隔符好像沒(méi)用 -->
3=33,
4=44
</value>
</property>
</bean>
<!-- Spring還提供了另外兩種更高級(jí)的配置方式,<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> <!-- 分隔符可以是 “換行”、“;”、“,” 不建議該方式,優(yōu)先選擇第一種方式 -->
1=111
2=222;<!-- 這樣的分隔符好像沒(méi)用 -->
3=333,
4=444
</value>
</property>
</bean>
?
調(diào)用處 利用加載父容器的方式,注入父容器中的Bean:
?
?
@Test
public void testDiBeanHigh() {
// 以classes為根目錄算起
// 讀取配置文件實(shí)例化一個(gè)Ioc容器
// 初始化父容器
ApplicationContext parentContext = new ClassPathXmlApplicationContext(
"helloworldParent.xml");
// 初始化當(dāng)前容器
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "helloworld.xml" }, parentContext);
// 構(gòu)造 + setter注入 引用其他的bean注入
HelloApi helloApi = context.getBean("helloHigh", HelloApi.class);
helloApi.sayHello();
}
已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論
ITeye推薦