sblig

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            10 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks


          跟我學Spring3 學習筆記一

          跟我學Spring3 學習筆記二

          跟我學Spring3 學習筆記三

          跟我學Spring3 學習筆記四

          跟我學Spring3 學習筆記五 注入

          ?

          ?

          引用其它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推薦



          posted on 2012-10-18 14:32 李凡 閱讀(149) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 铜山县| 大关县| 洞口县| 五台县| 泸西县| 广灵县| 灌云县| 浦县| 安多县| 手机| 特克斯县| 辽源市| 旌德县| 遂昌县| 平乡县| 祁连县| 云浮市| 昭平县| 夏津县| 郎溪县| 车致| 黎平县| 广东省| 呼和浩特市| 即墨市| SHOW| 衡阳市| 黔东| 内黄县| 大竹县| 淮阳县| 元谋县| 博客| 滕州市| 中江县| 汉阴县| 红桥区| 河北区| 衡水市| 威宁| 宁夏|