Learn Spring in spring(二) (zz)

來源:互聯網
上載者:User

二、spring管理對象的簡單例子

Bromon原創 請尊重著作權

  任何需要交給spring管理的對象,都必須在設定檔中註冊,這個過程被稱為wiring,下面做一個最簡單的Hello world示範,我們將要註冊的類如下:

 

  1. /*
  2.  * 建立日期 2005-3-22
  3.  */
  4. package org.bromon.spring.test;
  5.  
  6. /**
  7.  * @author Bromon
  8.  */
  9. public class HelloTalker 
  10. {
  11.     public String greeting()
  12.     {
  13.         return "hello world";
  14.     }
  15. }

  然後我們來編寫一個spring設定檔,檔案名稱任意,在我這裡它是springConfig.xml,需要注意的是這個檔案應該存放在classpath所包含的路徑中:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beans>
  4.  <bean id=”helloTalker” class=” org.bromon.spring.test.HelloTalker”>
  5.  </bean>
  6. </beans>

  通過使用bean標籤,註冊了一個HelloTalker對象,它的名字叫做helloTalker。然後我們編寫一個測試類別,它的工作是利用spring架構提供的介面,載入設定檔,通過指定對象的id,獲得一個對象。它的代碼如下:

  1. /*
  2.  * 建立日期 2005-3-17
  3.  */
  4. package org.bromon.spring.test.junit;
  5.  
  6. import java.io.FileInputStream;
  7.  
  8. import org.springframework.beans.factory.xml.XmlBeanFactory;
  9. import org.springframework.context.ApplicationContext;
  10. import org.springframework.context.support.ClassPathXmlApplicationContext;
  11.  
  12. import org.bromon.spring.test;
  13.  
  14. /**
  15.  * @author Bromon
  16.  */
  17. public class TestStudentManager extends TestCase {
  18.  
  19.     public void testHelloTalker() 
  20.     {
  21.         try
  22.         {
  23.             ApplicationContext context =new ClassPathXmlApplicationContext("springConfig.xml");
  24.             
  25. HelloTalker ht=(HelloTalker)context.getBean(“helloTalker”);
  26. System.out.println(ht.greeting());
  27.         }catch(Exception e)
  28.         {
  29.             e.printStackTrace();
  30.         }
  31.     }
  32.  
  33. }

  這個程式就完成了,因為只有一個對象HelloTalker被註冊到了spring中,所以不存在對象間的依賴,當然也就不涉及依賴注入。下面示範一個簡單的依賴注入:

  第一步是修改HelloTalker,增加一個String name屬性:

  1. public String name;

  為該屬性編寫set方法,該方法必須嚴格遵守javabean的命名規則:

  1. public void setName(String name)
  2. {
  3.   this.name=name;
  4. }

  修改greeting方法:

  1. public String greeting()
  2. {
  3.   return "hello "+name;
  4. }

  如你所見,name屬性沒有初試化,因為它的值將在運行過程中被spring動態注射入。

  第二步,修改springConfig.xml中唯一的這個bean配置:

  1. <bean id=”helloTalker” class=” org.bromon.spring.test.HelloTalker”>
  2.  <property name=”name”>
  3.   <value>bromon</value>
  4.  </property>
  5. </bean>

  修改完成。我們將一個名字”bromon”寫死在springConfig.xml中,它會被動態注入到HelloTalker的name屬性中,greeting方法將會把它列印出來。重新運行剛才的junit類,可以看到結果。

  我們只示範了如何注入一個最簡單的String,實際上我們可以注入任何實值型別,也可以注入任何類的執行個體,也可以注入List、Map、Properties。設定檔管理了所有的對象和對象間的關係,而對象則只負責執行自己的功能,他們的職責越少,藕合度越低,系統就越容易測試,管理維護也更容易。

  <bean>標籤還有很多屬性,用於指定對象如何被執行個體化,它也有很多子標籤用於設定物件的屬性,請大家參考相關的DTD和文檔,能夠很快的掌握。本系列文章不是spring手冊,spring的基礎知識請參考spring in action,足夠詳細準確。後面的章節更多的討論系統設計、開發的一些細節和進階特性。

  1. /*
  2.  * 建立日期 2005-3-22
  3.  */
  4. package org.bromon.spring.test;
  5.  
  6. /**
  7.  * @author Bromon
  8.  */
  9. public class HelloTalker 
  10. {
  11.     public String greeting()
  12.     {
  13.         return "hello world";
  14.     }
  15. }

  然後我們來編寫一個spring設定檔,檔案名稱任意,在我這裡它是springConfig.xml,需要注意的是這個檔案應該存放在classpath所包含的路徑中:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beans>
  4.  <bean id=”helloTalker” class=” org.bromon.spring.test.HelloTalker”>
  5.  </bean>
  6. </beans>

  通過使用bean標籤,註冊了一個HelloTalker對象,它的名字叫做helloTalker。然後我們編寫一個測試類別,它的工作是利用spring架構提供的介面,載入設定檔,通過指定對象的id,獲得一個對象。它的代碼如下:

  1. /*
  2.  * 建立日期 2005-3-17
  3.  */
  4. package org.bromon.spring.test.junit;
  5.  
  6. import java.io.FileInputStream;
  7.  
  8. import org.springframework.beans.factory.xml.XmlBeanFactory;
  9. import org.springframework.context.ApplicationContext;
  10. import org.springframework.context.support.ClassPathXmlApplicationContext;
  11.  
  12. import org.bromon.spring.test;
  13.  
  14. /**
  15.  * @author Bromon
  16.  */
  17. public class TestStudentManager extends TestCase {
  18.  
  19.     public void testHelloTalker() 
  20.     {
  21.         try
  22.         {
  23.             ApplicationContext context =new ClassPathXmlApplicationContext("springConfig.xml");
  24.             
  25. HelloTalker ht=(HelloTalker)context.getBean(“helloTalker”);
  26. System.out.println(ht.greeting());
  27.         }catch(Exception e)
  28.         {
  29.             e.printStackTrace();
  30.         }
  31.     }
  32.  
  33. }

  這個程式就完成了,因為只有一個對象HelloTalker被註冊到了spring中,所以不存在對象間的依賴,當然也就不涉及依賴注入。下面示範一個簡單的依賴注入:

  第一步是修改HelloTalker,增加一個String name屬性:

  1. public String name;

  為該屬性編寫set方法,該方法必須嚴格遵守javabean的命名規則:

  1. public void setName(String name)
  2. {
  3.   this.name=name;
  4. }

  修改greeting方法:

  1. public String greeting()
  2. {
  3.   return "hello "+name;
  4. }

  如你所見,name屬性沒有初試化,因為它的值將在運行過程中被spring動態注射入。

  第二步,修改springConfig.xml中唯一的這個bean配置:

  1. <bean id=”helloTalker” class=” org.bromon.spring.test.HelloTalker”>
  2.  <property name=”name”>
  3.   <value>bromon</value>
  4.  </property>
  5. </bean>

  修改完成。我們將一個名字”bromon”寫死在springConfig.xml中,它會被動態注入到HelloTalker的name屬性中,greeting方法將會把它列印出來。重新運行剛才的junit類,可以看到結果。

  我們只示範了如何注入一個最簡單的String,實際上我們可以注入任何實值型別,也可以注入任何類的執行個體,也可以注入List、Map、Properties。設定檔管理了所有的對象和對象間的關係,而對象則只負責執行自己的功能,他們的職責越少,藕合度越低,系統就越容易測試,管理維護也更容易。

  <bean>標籤還有很多屬性,用於指定對象如何被執行個體化,它也有很多子標籤用於設定物件的屬性,請大家參考相關的DTD和文檔,能夠很快的掌握。本系列文章不是spring手冊,spring的基礎知識請參考spring in action,足夠詳細準確。後面的章節更多的討論系統設計、開發的一些細節和進階特性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.