歡迎您光臨本站 註冊首頁

Spring使用入門示例

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  在Java世界有一件事情需要習以為常,就是經常會跑出一堆縮寫、概念出來,什麼Spring、Struts、Hibernate等等等等,這種情況談不上好,你得花時間熟悉;也不能說是缺點,畢竟它帶來新鮮跟樂趣.

  最近稍微接觸了一些Spring的皮毛,寫了個例子,希望對初初初學者有用,高手指正.

  1.Spring是什麼

  網上對Spring以及使用Spring的好處的解釋鋪天蓋地,常常是各個網站之間互相拷貝,而且還引入了一堆的縮寫,什麼IoC、AOP……

  我覺得對跟我一樣的初學者而言,可以這麼理解:Spring是基於反射機制寫的一些包,有了它以後你可以將類的實例化寫到一個配置文件里,由相應的Spring包負責實例化.

  假設你有一個類A,以前你實例化時要寫A a = new A(),現在不用了,你只要寫一個xml文件,並按Spring指定的格式配置好,它就能通過反射機制將A的實例返回給你.

  至於使用Spring的好處,我會在下面的實例中提到.

  2. 下載Spring

  

spring-framework-3.0.3.RELEASE-dependencies.zip<?XML:NAMESPACE PREFIX = O />

(sha1)

155.7 MB

spring-framework-3.0.3.RELEASE-with-docs.zip

(sha1)

45.0 MB

spring-framework-3.0.3.RELEASE.zip

(sha1)

21.4 MB

  我第一次下載的是with-docs.zip,覺得解壓后看了一下,Spring自身的jar應該是都有了,不過在後面的程序編譯時出現:

  Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

  沒有找到相關的jar包,後來嘗試下載dependencies.zip並在裡面找到了com.springsource.org.apache.commons.logging-1.1.1.jar包.

  總而言之,我也不知道它們這些release包是怎麼組織起來的,汗.

  3. 編寫示例

  示例包含一個介面IProgrammingLanguage,用於表示編程語言,兩個類JavaLanguage跟PerlLanguage實現該介面用於表示特定的編程語言Java跟Perl.

  另外有一個Developer類,用於表示IT開發者.,是程序入口所在的Main類.

  3.1.介面IProgrammingLanguage.java

  package example;

  public interface IProgrammingLanguage {

  public String whoAmI();

  }

  3.3.JavaLanguage.java

  代碼

  package example;

  public class JavaLanguage implements IProgrammingLanguage {

  @Override

  public String whoAmI() {

  // TODO Auto-generated method stub

  return "Java";

  }

  }

  3.3.PerlLanguage.java

  代碼

  package example;

  public class PerlLanguage implements IProgrammingLanguage {

  @Override

  public String whoAmI() {

  // TODO Auto-generated method stub

  return "Perl";

  }

  }

  3.4.Developer.java

  (這個類用於描述一個開發人員,它包含一個IProgrammingLanguage類型的成員,用於表示該開發人員所使用的編程語言.在Eclipse中選中該成員,右鍵—Source—Generate Getters and Setters…則可以自動生成相應的get、set方法,一開始我並沒有去生成這些,但在運行時出錯,提示缺少get、set方法.)

  代碼

  package example;

  public class Developer {

  public IProgrammingLanguage language;

  /**

  * @return the language

  */

  public IProgrammingLanguage getLanguage() {

  return language;

  }

  /**

  * @param language the language to set

  */

  public void setLanguage(IProgrammingLanguage language) {

  this.language = language;

  }

  public String getCurrentUsingLanguage() {

  return language.whoAmI();

  }

  }

  3.5.添加引用

  org.springframework.core-3.0.2.RELEASE.jar

  org.springframework.beans-3.0.2.RELEASE.jar

  com.springsource.org.apache.commons.logging-1.1.1.jar

  3.6.hellospringworld.xml

  代碼

  <?xml version="1.0" encoding="UTF-8"?>

  <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">

  <beans>

  <bean id="LanguageBean" class="example.PerlLanguage">

  </bean>

  <bean id="DeveloperBean" class="example.Developer">

  <property name="language" ref="LanguageBean"/>

  </bean>

  </beans>

  3.7.Main.java

  代碼

  package example;

  import org.springframework.beans.factory.BeanFactory;

  import org.springframework.beans.factory.xml.XmlBeanFactory;

  import org.springframework.core.io.FileSystemResource;

  import org.springframework.core.io.Resource;

  public class Main {

  public static void main(String[] args) {

  // TODO Auto-generated method stub

  Resource r = new FileSystemResource("hellospringworld.xml");

  BeanFactory f = new XmlBeanFactory(r);

  Developer d = (Developer) f.getBean("DeveloperBean");

  String s = d.getCurrentUsingLanguage();

  System.out.println("The developer is currently using: " s);

  }

  }

  運行此程序可以看到輸出是:

  The developer is currently using: Perl

  現在,假設有一天這個Developer不使用Perl而改用Java了,我們需要做什麼?我們並不需要改程序,只需要修改xml文件就行了.

  <bean id="LanguageBean" class="example.PerlLanguage"></bean>

  改成

  <bean id="LanguageBean" class="example.JavaLanguage"></bean>

  這就是我目前所理解的使用Spring的好處,即解耦,減少不同的類之間的耦合性.

  當然,現在的Spring已經日漸複雜跟強大,其中很多特性我並沒有使用過,上面所說都是些粗淺的理解,等待以後使用的過程中有更加深入的認識.


[火星人 ] Spring使用入門示例已經有559次圍觀

http://coctec.com/docs/java/show-post-60314.html