Eclipse插件之Spring IDE

本文介紹如何利用Eclipse插件Spring IDE在Eclipse中的使用。

  Eclipse是目前非常流行的開發平臺,開放擴展的架構讓很多程序員找到了自己個性化的工作環境。

  問題提出:

  在採用Spring框架進行系統開發時,Bean的配置文件XML的書寫、XML文件的內容校驗及Bean之間的依賴關係查看等工作,如果能夠採用合適的工具來完成,會成倍提高開發效率。

  解決方法

  Spring IDE是Spring官方網站推薦的Eclipse插件,可提供在開發Spring時對Bean定義文件進行驗證並以可視化的方式查看各個Bean之間的依賴關係等。

  同時,建議結合Eclipse XMLBuddy插件進行XML文件編輯與校驗,是個不錯的選擇。
安裝說明 

  JDK:1.5.0     從http://java.sun.com上去下載安裝

  Eclipse:3.1.2   從http://www.eclipse.org 上去下載解壓

  Spring 1.2.8    從http://www.springframework.org 上去下載解壓

  Spring IDE 1.3.2  從http://springide.org 上去下載

  XMLBuddy 2.0.72  從http://www.xmlbuddy.com/ 上去下載

  Spring IDE 1.3.2 Update地址爲:http://springide.org/updatesite/

  管理技巧 

  提示:新下載的插件PlugIn一定不要都放在原始的Eclipse目錄下去,一大堆,累死你:(
  1. 前提是你已經下載解壓並設置好Eclipse工具,比如解壓在E:/OpenSource/Eclipse/目錄下,以下這個目錄以%ECLIPSE_HOME%來進行表示;
  2. 此時默認的插件是在%ECLIPSE_HOME%/plugins目錄中的;
  3. 在%ECLIPSE_HOME%下建立一個PlugInsNew的目錄; 
      比如:E:/OpenSource/Eclipse/PlugInsNew
  4. 如果你下載了一個新的插件,比如叫做:XYZ 

    那麼就在%ECLIPSE_HOME%/PlugInsNew/目錄下建立XYZ目錄,目錄裏面是eclipse目錄,eclipse目錄包含有features與plugins兩個子目錄;結構如下圖所示:

    圖1
  5. 把下載的新插件的文件放在以下相應目錄中; 
      %ECLIPSE_HOME%/PlugInsNew/XYZ/eclipse/features

      %ECLIPSE_HOME%/PlugInsNew/ XYZ/eclipse/plugins

  6. 建立相關的.link的文件; 

      然後在%ECLIPSE_HOME%/links目錄裏建立一個XYZ.link的文件

      內容如是:

      path=E:/OpenSource/Eclipse/PlugInsNew/XYZ

      就一行這樣的路徑指示而已。

      這樣,如果你下載了多個插件就可以如法炮製建立多個Link文件,想加載哪個插件就把哪個插件的Link文件放到%ECLIPSE_HOME%/links的目錄中即可,使用與管理都很方便,建議千萬不要放在默認的安裝目錄中,這樣對於升級Eclipse主程序也方便一些;當然如果你喜歡用Find and Install…進行安裝的話也可以的;

      如果上面你的%ECLIPSE_HOME%與此不同,請修改XYZ.link文件裏的路徑。

  7. 刪除插件,先關閉Eclipse; 
      刪除%ECLIPSE_HOME%/links/XYZ.link文件即可

      刪除%ECLIPSE_HOME%/PlugInsNew/XYZ整個目錄及文件

  8. 重新啓動Eclipse,這樣就可以了。如果插件沒有生效或者沒有刪除,請加上-clean進行啓動Eclipse,即Eclipse.exe –clean 

  9. 插件安裝驗證及記錄詳見:Eclipse的workspace下面的.metadata/.log文件,比如:%ECLIPSE_HOME%/workspace/.metadata/.log文件,有問題的話,打開這個文件看看並進行解決。

 確認安裝 

  此插件安裝方法採用上一節的《Eclipse使用技巧之插件管理》

  重新啓動Eclipse後,在Help è About Eclipse SDK è Plug-in Details你可以看到由“Spring IDE Developer”提供的“Spring IDE”版本爲“1.3.2”插件及相關的Graph、UI及UI Search插件,如下圖所示:

圖2
 
  相關要求 

  注意:爲了讓Spring IDE插件能夠顯示可視化的Bean結構圖形及Bean之間的依賴關係,需要Eclipse GEF(Graphical Editing Framework)的支持,自己下載並解壓安裝,安裝技巧同上《Eclipse使用技巧之插件管理》。

  Spring 1.2系列當前最新的穩定版本爲1.2.8,下載時可以選擇包含Spring所依賴的一些開源包的文件spring-framework-1.2.8-with-dependencies.zip,如果你已經清楚並有了Spring所依賴的相關開源包,就單獨下載spring-framework-1.2.8.zip即可。建議下載前者。

  解壓後目錄結構及包的說明如下:

圖3

  dist目錄下是Spring的發佈包,關於發佈包下面會詳細進行說明;

  docs目錄下是相關的文檔,包括有Spring api的javadoc、reference參考指南、Spring的taglib標籤使用文件及Spring MVC的MVC-step-by-step講解與示例;

  lib目錄下是Spring所依賴的第三方開源包;

  mock目錄下是Spring輔助應用測試的Mock源程序;

  samples目錄下是Spring的示例源程序及簡單的webapp示例框架的示例配置,值得好好學習的有jpetstore及petclinic,當然其它的countries、imagedb、tiles-example也可以好好參考一下;

  src目錄下是Spring的源程序;

  test目錄下Spring的單元測試源程序;

  tiger目錄下是Java 1.5 Tiger方面的相關及測試源程序。

  Spring包結構說明 

  接下來詳細說說dist目錄下jar包的相關內容

  spring.jar是包含有完整發布的單個jar包,spring.jar中除了spring-mock.jar裏所包含的內容外其它所有jar包的內容,因爲只有在開發環境下才會用到spring-mock.jar來進行輔助測試,正式應用系統中是用不得這些類的。

  除了spring.jar文件,Spring還包括有其它13個獨立的jar包,各自包含着對應的Spring組件,用戶可以根據自己的需要來選擇組合自己的jar包,而不必引入整個spring.jar的所有類文件。

  spring-core.jar

  這個jar文件包含Spring框架基本的核心工具類,Spring其它組件要都要使用到這個包裏的類,是其它組件的基本核心,當然你也可以在自己的應用系統中使用這些工具類。

  spring-beans.jar

  這個jar文件是所有應用都要用到的,它包含訪問配置文件、創建和管理bean以及進行Inversion of Control / Dependency Injection(IoC/DI)操作相關的所有類。如果應用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。

  spring-aop.jar

  這個jar文件包含在應用中使用Spring的AOP特性時所需的類。使用基於AOP的Spring特性,如聲明型事務管理(Declarative Transaction Management),也要在應用裏包含這個jar包。

  spring-context.jar

  這個jar文件爲Spring核心提供了大量擴展。可以找到使用Spring ApplicationContext特性時所需的全部類,JDNI所需的全部類,UI方面的用來與模板(Templating)引擎如Velocity、FreeMarker、JasperReports集成的類,以及校驗Validation方面的相關類。

  spring-dao.jar

  這個jar文件包含Spring DAO、Spring Transaction進行數據訪問的所有類。爲了使用聲明型事務支持,還需在自己的應用裏包含spring-aop.jar。

  spring-hibernate.jar

  這個jar文件包含Spring對Hibernate 2及Hibernate 3進行封裝的所有類。

  spring-jdbc.jar

  這個jar文件包含對Spring對JDBC數據訪問進行封裝的所有類。

  spring-orm.jar

  這個jar文件包含Spring對DAO特性集進行了擴展,使其支持 iBATIS、JDO、OJB、TopLink,因爲Hibernate已經獨立成包了,現在不包含在這個包裏了。這個jar文件裏大部分的類都要依賴spring-dao.jar裏的類,用這個包時你需要同時包含spring-dao.jar包。

  spring-remoting.jar

  這個jar文件包含支持EJB、JMS、遠程調用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的類。

  spring-support.jar

  這個jar文件包含支持緩存Cache(ehcache)、JCA、JMX、郵件服務(Java Mail、COS Mail)、任務計劃Scheduling(Timer、Quartz)方面的類。

  spring-web.jar

  這個jar文件包含Web應用開發時,用到Spring框架時所需的核心類,包括自動載入WebApplicationContext特性的類、Struts與JSF集成類、文件上傳的支持類、Filter類和大量工具輔助類。

  spring-webmvc.jar

  這個jar文件包含Spring MVC框架相關的所有類。包含國際化、標籤、Theme、視圖展現的FreeMarker、JasperReports、Tiles、Velocity、XSLT相關類。當然,如果你的應用使用了獨立的MVC框架,則無需這個JAR文件裏的任何類。

  spring-mock.jar

  這個jar文件包含Spring一整套mock類來輔助應用的測試。Spring測試套件使用了其中大量mock類,這樣測試就更加簡單。模擬HttpServletRequest和HttpServletResponse類在Web應用單元測試是很方便的。

  如何選擇這些發佈包,決定選用哪些發佈包其實相當簡單。如果你正在構建Web應用並將全程使用Spring,那麼最好就使用單個全部的spring.jar文件;如果你的應用僅僅用到簡單的Inversion of Control / Dependency Injection(IoC/DI)容器,那麼只需spring-core.jar與spring-beans.jar即可;如果你對發佈的大小要求很高,那麼就得精挑細選了,只取包含自己所需特性的jar文件了。採用獨立的發佈包你可以避免包含自己的應用不需要的全部類。當然你可以採用其它的一些工具來設法令整個應用包變小,節省空間的重點在於準確地找出自己所需的Spring依賴類,然後合併所需的類與包就可以了。Eclispe有個插件叫ClassPath Helper可以幫你找找所依賴的類。

  Spring包依賴說明

spring-core.jar需commons-collections.jar,spring-core.jar是以下其它各個的基本。 

spring-beans.jar需spring-core.jar/cglib-nodep-2.1_3.jar 
spring-aop.jar需spring-core.jar/spring-beans.jar/cglib-nodep-2.1_3.jar/aopalliance.jar 
spring-context.jar需 
spring-core.jar/spring-beans.jar/spring-aop.jar/commons-collections.jar/aopalliance.jar 

spring-dao.jar需spring-core.jar/spring-beans.jar/spring-aop.jar/spring-context.jar 
spring-jdbc.jar需spring-core.jar/spring-beans.jar/spring-dao.jar 
spring-web.jar需spring-core.jar/spring-beans.jar/spring-context.jar 
spring-webmvc.jar需spring-core.jar/spring-beans.jar/spring-context.jar/spring-web.jar 
spring-hibernate.jar需 
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-jdbc.jar/spring-orm.jar/spring-web.jar/spring-webmvc.jar 
spring-orm.jar需 
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-jdbc.jar/spring-web.jar/spring-webmvc.jar 
spring-remoting.jar需 
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-context.jar/spring-web.jar/spring-webmvc.jar 
spring-support.jar需 
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-context.jar/spring-jdbc.jar 

spring-mock.jar需spring-core.jar/spring-beans.jar/spring-dao.jar/spring-context.jar/spring-jdbc
插件介紹 

  我們簡單地創建一個示例工程,裏面包含有一個接口類與兩個實現該接口的實現類進行演示說明使用的方法。

  需要引入spring.jar、commons-logging.jar、log4j.jar

  單個引入需要引入spring-core.jar、spring-beans.jar、spring-context.jar

  接口類:IHelloWorld.java
public interface     IHelloWorld 
{ 
      String sayHelloWorld(); 
}

  實現類一:HelloWorld1.java
public class HelloWorld1 implements IHelloWorld 
{ 
 public HelloWorld1() 
 { 
     super(); 
 } 

 public String sayHelloWorld() 
 { 
     return "Hello World HelloWorld1"; 
 } 
} 

  實現類二:HelloWorld2.java
public class HelloWorld2 implements IHelloWorld 
{ 
 public HelloWorld2() 
 { 
     super(); 
 } 

 public String sayHelloWorld() 
 { 
     return "Hello World HelloWorld2"; 
 } 
} 

  根據常用的三層與Spring的最佳實踐,將配置文件分成了四個

  beanRefFactory.xml負責總裝,由SingletonBeanFactoryLocator來裝入

  通過ClassPathXmlApplicationContext來把其它三個模塊的文件引入

  beanRefDataAccess.xml負責DAO,與數據庫相關的bean都定義在這裏

  beanRefService.xml負責Service層的bean定義

  beanRefMVC.xml負責Spring MVC方面相關的bean定義等等

  以下配置文件的bean定義爲演示所用,各自的內容如下:

  beanRefFactory.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="beanFactory" class="org.springframework.context.support.ClassPathXmlApplicationContext"> 
<constructor-arg> 
<list> 
<value>beanRefDataAccess.xml</value> 
<value>beanRefService.xml</value> 
<value>beanRefMVC.xml</value> 
</list> 
</constructor-arg> 
</bean> 
</beans>

  beanRefDataAccess.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="helloWorldDAO1" class="HelloWorld1"/> 
 <bean id="helloWorldDAO2" class="HelloWorld2"/> 
</beans>

  beanRefService.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="helloWorld1" class="HelloWorld1"/> 
 <bean id="helloWorld2" class="HelloWorld2"/> 
 <bean id="springDemoConstructor" class="SpringDemoConstructor"> 
     <constructor-arg> 
      <value>Spring IDE Constructor</value> 
     </constructor-arg> 
     <property name="helloWorld"> 
      <ref bean="helloWorld1"></ref> 
     </property> 
 </bean> 
 <bean id="springDemoSetter" class="SpringDemoSetter"> 
     <property name="hello" value="Spring IDE Setter"/> 
     <property name="helloWorld"> 
      <ref bean="helloWorld2"></ref> 
     </property> 
 </bean> 
</beans>

  beanRefMVC.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="helloWorldMVC1" class="HelloWorld1"/> 
 <bean id="helloWorldMVC2" class="HelloWorld2"/> 
</beans> 

  右鍵項目工程:可以看到“Add Spring Project Nature”菜單,單擊它

圖4

  細心的你一定可以看到項目工程SpringIDEDemo前面的圖標變成了一個S的標誌,而不是原來的J,當然項目裏與Spring相關的文件都會在圖標上顯示一個S標誌。J

  右鍵彈出的菜單裏就會有個“Remove Spring Project Nature”的菜單了。

  你選擇這個菜單進行移除後就不能進行以下的相關操作了。

圖5

  Window è Show View è Other… è 可以看到Spring IDE,打開它,如下所示,所中它並確定。

圖6

  可以看到如下的視圖,右鍵工程的名稱,在彈出的Properties菜單上點擊它

圖7

  彈出屬性框,讓我們來添加配置文件

圖8

  確定後,可以看到剛纔選擇的四個配置文件已經在裏面了,再次確定。

圖9

  在Spring Beans視圖裏展開工程後,便可以看到增加進來的四個配置文件了。

圖10

  也可以將配置文件放到配置集合裏,如下所示:

圖11

  這樣確定以後,可以看到四個文件都屬於Service的節點下面,如下所示。

圖12

  再次確定後,在Spring Beans視圖裏看到Service節點,展開它,可以看到所有配置文件裏的bean都在這裏列出來了。

圖13

  展開顯示兩個定義的bean結點,右鍵其中的一個結點,彈出四個菜點,最後一個就是上面的配置菜單,不再講解了,我們選中“Open Config File”菜單

圖14

  於是就會自動打開配置文件,並定位到bean的定義位置上面去了,如下所示,方便進行查看與改動。

圖15

  在右鍵彈出的菜單點選中“Open Bean Class”,

圖16

  就會自動定位到對應的類文件裏去了,如下所示。

圖17

  在右鍵彈出的菜單點選中“Show Graph”,

圖18

  就會把當前這個bean以圖形的方式顯示出來,如下所示。

圖19

  但是這個演示的文件僅是一個獨立的bean,沒有任何關聯等,下面會演示關聯等。

  在Spring Beans視圖裏展開工程後,選中src/beanRefSerice.xml配置文件,在右鍵彈出的菜單點選中“Show Graph”

圖20

  就會把當前整個配置文件的內容以bean圖形的方式顯示出來,如下所示。

圖21

  以下演示bean的引用及構造注入與setter注入何關聯等,更多的操作類似了。

  定義一個接口類ISpringDemo.java,有兩個方法
  public interface ISpringDemo 
{ 
 IHelloWorld getHelloWorld(); 
 String getHello(); 
} 

  實現類一SpringDemoConstructor.java,含有構造注入及setter注入
  public class SpringDemoConstructor implements ISpringDemo 
{ 
 private String hello; 
 private IHelloWorld helloWorld; 
    
 public SpringDemoConstructor(String hello) 
 { 
    this.hello = hello; 
 } 
    
 public String getHello() 
 { 
    return hello; 
 } 

 public IHelloWorld getHelloWorld() 
 { 
    return helloWorld; 
 } 

 public void setHelloWorld(IHelloWorld helloWorld) 
 { 
    this.helloWorld = helloWorld; 
 } 
} 


  實現類二SpringDemoSetter.java,都是setter注入
  public class SpringDemoSetter implements ISpringDemo 
{ 
 private String hello; 
 private IHelloWorld helloWorld; 

 public String getHello() 
 { 
    return hello; 
 } 

 public void setHello(String hello) 
 { 
    this.hello = hello; 
 } 

 public IHelloWorld getHelloWorld() 
 { 
    return helloWorld; 
 } 

 public void setHelloWorld(IHelloWorld helloWorld) 
 { 
    this.helloWorld = helloWorld; 
 } 
} 

  配置文件beanRefService.xml增加bean定義,成爲如下,紅字爲新增的
  <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="helloWorld1" class="HelloWorld1"/> 
 <bean id="helloWorld2" class="HelloWorld2"/> 
 <bean id="springDemoConstructor" class="SpringDemoConstructor"> 
    <constructor-arg> 
     <value>Spring IDE Constructor</value> 
    </constructor-arg> 
    <property name="helloWorld"> 
     <ref bean="helloWorld1"></ref> 
    </property> 
 </bean> 
 <bean id="springDemoSetter" class="SpringDemoSetter"> 
    <property name="hello" value="Spring IDE Setter"/> 
    <property name="helloWorld"> 
     <ref bean="helloWorld2"></ref> 
    </property> 
 </bean> 
</beans>

  注意:

  如果bean是定義在同一個文件裏的可以用
  <ref local="helloWorld2"></ref>

  如果不是在同一個配置文件裏的,要用
  <ref bean="helloWorld2"></ref>

  要不然會報到bean找不到!

  這樣配置完成後,我們切換到“Spring Beans”視圖,在beanRefService.xml節點上右鍵打開“Show Graph”菜單,可以看到如下所示:

圖21

  這時bean裏面簡單的引用關係就表現出來了。

圖22

  在bean圖上右鍵,會打開三個操作菜單:

  Open Java Type即定位到bean的類文件上面;

  Open Config File即定位到bean的xml配置文件上面;

  Show In Beans View即定位到“Spring Beans”的視圖裏的具體某個節點上,如下所示。

圖23

  此時我們可以在配置集合的Service節點上面右鍵,選擇“Show Graph”

圖24

  這樣就會顯示出所有的配置文件集合裏的所有bean文件及其關聯引用情況,如下圖。

圖25

  帶圈的P圖標表示是屬性,即setter方法注入,帶圈的C圖標表示構造注入。箭頭表示引用關係了。J

  中間一排演示用的四個bean沒有關聯引入,就光桿司令地在那裏排隊了啦J

  最下面的帶圈的C後面又跟着一大排參數,表示集合類型的了。如list

  Spring IDE提供錯誤檢查功能,比如我在配置文件中輸入一個不存在的類的名稱,保存後,就會在邊上出現紅色提示,鼠標移上去就會出現提示信息,如下圖所示。

圖26

  當然也會有Problems視圖裏顯示相應的錯誤信息,如下圖:

圖27

  以下演示bean的引用及構造注入與setter注入何關聯等,更多的操作類似了。

  定義一個接口類ISpringDemo.java,有兩個方法
  public interface ISpringDemo 
{ 
 IHelloWorld getHelloWorld(); 
 String getHello(); 
} 

  實現類一SpringDemoConstructor.java,含有構造注入及setter注入
  public class SpringDemoConstructor implements ISpringDemo 
{ 
 private String hello; 
 private IHelloWorld helloWorld; 
    
 public SpringDemoConstructor(String hello) 
 { 
    this.hello = hello; 
 } 
    
 public String getHello() 
 { 
    return hello; 
 } 

 public IHelloWorld getHelloWorld() 
 { 
    return helloWorld; 
 } 

 public void setHelloWorld(IHelloWorld helloWorld) 
 { 
    this.helloWorld = helloWorld; 
 } 
} 


  實現類二SpringDemoSetter.java,都是setter注入
  public class SpringDemoSetter implements ISpringDemo 
{ 
 private String hello; 
 private IHelloWorld helloWorld; 

 public String getHello() 
 { 
    return hello; 
 } 

 public void setHello(String hello) 
 { 
    this.hello = hello; 
 } 

 public IHelloWorld getHelloWorld() 
 { 
    return helloWorld; 
 } 

 public void setHelloWorld(IHelloWorld helloWorld) 
 { 
    this.helloWorld = helloWorld; 
 } 
} 

  配置文件beanRefService.xml增加bean定義,成爲如下,紅字爲新增的
  <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="helloWorld1" class="HelloWorld1"/> 
 <bean id="helloWorld2" class="HelloWorld2"/> 
 <bean id="springDemoConstructor" class="SpringDemoConstructor"> 
    <constructor-arg> 
     <value>Spring IDE Constructor</value> 
    </constructor-arg> 
    <property name="helloWorld"> 
     <ref bean="helloWorld1"></ref> 
    </property> 
 </bean> 
 <bean id="springDemoSetter" class="SpringDemoSetter"> 
    <property name="hello" value="Spring IDE Setter"/> 
    <property name="helloWorld"> 
     <ref bean="helloWorld2"></ref> 
    </property> 
 </bean> 
</beans>

  注意:

  如果bean是定義在同一個文件裏的可以用
  <ref local="helloWorld2"></ref>

  如果不是在同一個配置文件裏的,要用
  <ref bean="helloWorld2"></ref>

  要不然會報到bean找不到!

  這樣配置完成後,我們切換到“Spring Beans”視圖,在beanRefService.xml節點上右鍵打開“Show Graph”菜單,可以看到如下所示:

圖21

  這時bean裏面簡單的引用關係就表現出來了。

圖22

  在bean圖上右鍵,會打開三個操作菜單:

  Open Java Type即定位到bean的類文件上面;

  Open Config File即定位到bean的xml配置文件上面;

  Show In Beans View即定位到“Spring Beans”的視圖裏的具體某個節點上,如下所示。

圖23

  此時我們可以在配置集合的Service節點上面右鍵,選擇“Show Graph”

圖24

  這樣就會顯示出所有的配置文件集合裏的所有bean文件及其關聯引用情況,如下圖。

圖25

  帶圈的P圖標表示是屬性,即setter方法注入,帶圈的C圖標表示構造注入。箭頭表示引用關係了。J

  中間一排演示用的四個bean沒有關聯引入,就光桿司令地在那裏排隊了啦J

  最下面的帶圈的C後面又跟着一大排參數,表示集合類型的了。如list

  Spring IDE提供錯誤檢查功能,比如我在配置文件中輸入一個不存在的類的名稱,保存後,就會在邊上出現紅色提示,鼠標移上去就會出現提示信息,如下圖所示。

圖26

  當然也會有Problems視圖裏顯示相應的錯誤信息,如下圖:

圖27

 XMLBuddy

  由於打開XML文件時會根據XML文件裏定義的DTD去網上查找相應的DTD文件,這樣導至打開的時候會相當慢,特別是如果你的機器上不了外網的話,就更慢了。

  解決的辦法有兩個:

  一、在本機開啓Web服務(如Tomcat等等),並設置端口爲80,然後根據DTD 的目錄結構建立相應的結構,並把DTD文件放進去。然後在hosts文件裏把本機的地址映射到相應的DTD指定的網站去,如:

  127.0.0.1// www.springframework.org

  這樣打開XML文件時就會在本機尋找DTD文件進行驗證,速度就快很多了J

  二、打開XMLBuddy插件的安裝目錄,並找到其中的cache目錄,比如:%ECLIPSE_HOME%/PlugInsNew/xmlbuddy/eclipse/plugins/com.objfac.xmleditor_2.0.72/.cache

  打開meta.xml文件,一看就知道怎麼處理了吧,如法炮製,選把DTD文件拷貝到這個cache目錄裏,再增加內容到meta.xml裏來,比如:
<file> 
<pub>-//SPRING//DTD    BEAN//EN</pub> 
<abs>http://www.springframework.org/dtd/spring-beans.dtd</abs> 
<rel>spring-beans.dtd</rel> 
</file>

  要增加其它的DTD文件方法類似,不斷地增加說明與DTD文件即可。

  於是在編輯XML文件時就會有相關的提示及錯誤提示信息,可以減少一些書寫XML文件時發生的低級錯誤了。

圖28

  測試與運行

  先建立一個Log4J的配置文件log4j.properties,內容如下
# Set root logger level to ERROR and its only appender to R. 
log4j.rootLogger = INFO,R 

# R is set to be a DailyRollingFileAppender. 
log4j.appender.R = org.apache.log4j.DailyRollingFileAppender 

log4j.appender.R.File = Application.log 
log4j.appender.R.DatePattern = yyyy-MM-dd'.log' 
log4j.appender.R.layout = org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n 

  再創建一個ServiceFactory.java靜態類,用來做單元測試方便一些
import org.springframework.beans.factory.BeanFactory; 
import org.springframework.beans.factory.access.BeanFactoryLocator; 
import org.springframework.beans.factory.access.BeanFactoryReference; 
import org.springframework.beans.factory.access.SingletonBeanFactoryLocator; 

public final class ServiceFactory 
{ 
 private static BeanFactoryLocator bfLocator = null; 
 private static BeanFactoryReference bfReference = null; 
 private static BeanFactory factory = null; 
 static 
 { 
    bfLocator = SingletonBeanFactoryLocator.getInstance(); 
    bfReference = bfLocator.useBeanFactory("beanFactory"); 
    factory = bfReference.getFactory(); 
 } 
    
 private ServiceFactory() 
 { 
    super(); 
 } 

 public static Object getBeanByName(final String beanName) 
 { 
    return factory.getBean(beanName); 
 } 
} 
做成靜態的這樣我們可以ServiceFactory .getBeanByName(“beanname”)就可以得到相應的bean了。

  測試類SpringIDETest.java代碼如下:
import junit.framework.TestCase; 

public class SpringIDETest extends TestCase 
{ 
 private IHelloWorld helloWorld = null; 
 private ISpringDemo springDemo = null; 
 private final static String hello1 = "Hello World HelloWorld1"; 
 private final static String hello2 = "Hello World HelloWorld2"; 
 private final static String helloset = "Spring IDE Setter"; 
 private final static String hellocon = "Spring IDE Constructor"; 

 public void testSpringBeans() 
 { 
    helloWorld = (IHelloWorld)ServiceFactory.getBeanByName("helloWorld1"); 
    assertEquals(hello1,helloWorld.sayHelloWorld()); 
    helloWorld = (IHelloWorld)ServiceFactory.getBeanByName("helloWorld2"); 
    assertEquals(hello2,helloWorld.sayHelloWorld()); 
 } 
 public void testIoCConstructor() 
 { 
    //Constructor 
    springDemo = (ISpringDemo)ServiceFactory.getBeanByName("springDemoConstructor"); 
    assertEquals(hellocon,springDemo.getHello()); 
    assertEquals(hello1,springDemo.getHelloWorld().sayHelloWorld()); 
 } 
 public void testIoCSetter() 
 { 
    //Setter 
    springDemo = (ISpringDemo)ServiceFactory.getBeanByName("springDemoSetter"); 
    assertEquals(helloset,springDemo.getHello()); 
    assertEquals(hello2,springDemo.getHelloWorld().sayHelloWorld()); 
 } 
} 

  Run As JUnit Test之,綠色打勾全部通過就收工走人了。。。J

  當然也可以打開Application.log文件查看輸出一些什麼信息。 

轉載:http://blog.csdn.net/hwctl/article/details/1718669
發佈了16 篇原創文章 · 獲贊 11 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章