Topic: 第一個Spring程式

  Print this page

1.第一個Spring程式 Copy to clipboard
Posted by: justin_here
Posted on: 2004-10-21 10:45

開始寫寫Spring,這是最簡單的一個入門程式,貼在這邊讓想看看最簡單的Spring程式如何撰寫的人看看,以後相關的文章就直接貼在JavaWorld的Wiki上了。。。。

========================
首先我們要先取得Spring的相關檔案,Spring的檔案放在SourceForge上,網址是:
http://sourceforge.net/project/showfiles.php?group_id=73357

撰寫此文時,Spring最新的版本是1.1.1,有兩個下載版本,一個是spring-framework-1.1.1-with-dependencies.zip,一個是spring-framework-1.1.1.zip,with-dependencies的包括一些ant、jakarta-commons、struts、velocity等等其它開源Java專案的相依檔案,如果您也需要這些相關檔案,可以下載這個版本,如果您已經有這些相關檔案,則只需要下載spring-framework-1.1.1.zip這個檔案。

下載zip檔案並解壓縮之後,在dist目錄下就是使用Spring所需要的相關檔案,如果下載的是with-dependencies版本,則在lib目錄中的是您可能會用到的相依檔案。在dist目錄下,spring-core.jar是Spring的核心,對於撰寫簡單的單機程式來說,使用這個核心即可,如果日後需要使用到Spring其它的子框架支援,再將其它的jar檔案加入即可,例如spring-aop.jar、spring-webmvc.jar等等。您也可以直接使用spring.jar這個檔案,它包括了所有Spring支援的功能所需要的所有類別,而不再需要加入個別的jar檔案。

就我們的第一個Spring程式,只要spring-core.jar這個檔案即可,它唯一相依的其它專案檔案,是commons-logging.jar,您可以在lib目錄的jakarta-commons目錄中找到,將這兩個檔案的位置加入至CLASSPATH中,我們就可以開始撰寫第一個Spring程式。

來撰寫我們的第一個組件(component),它只是一個簡單的JavaBean,用來向新的使用者打招呼:
package onlyfun.caterpillar;

public class HelloBean {
private String helloWord = "Hello!World!";

public void setHelloWord(String helloWord) {
this.helloWord = helloWord;
}
public String getHelloWord() {
return helloWord;
}
}


HelloBean有預設的"Hello!World!"字串,我們也可以透過setter來設定新的招呼語,不過我們不親自撰寫程式來作這些事,而是在組態檔案定義,由Spring來為我們作設定的動作,我們撰寫bean.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="helloBean" class="onlyfun.caterpillar.HelloBean">
<property name="helloWord"><value>Hello!Justin!</value></property>
</bean>
</beans>


bean.xml中定義了JavaBean的別名與來源類別,<property>標籤中設定了我們希望注入至JavaBean的字串值,bean.xml必須在您的CLASSPATH可以存取到的目錄中,也許是現行的工作目錄,在Web程式中可以是在classes目錄下,我們這邊使用的是單機程式的方式,將使用FileInputStream讀取bean.xml,所以將之置於現行的工作目錄中,接著我們撰寫一個簡單的測試程式:
package onlyfun.caterpillar;

import java.io.*;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;

public class SpringTest {
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("bean.xml");
BeanFactory factory = new XmlBeanFactory(is);

HelloBean hello = (HelloBean) factory.getBean("helloBean");
System.out.println(hello.getHelloWord());
}
}


這是從比較低層次的角度來使用Spring的IoC容器功能,藉由BeanFactory來讀取組態檔案並完成依賴的關聯注入,這邊的依賴是什麼?指的是HelloBean相依於String物件,透過setter所保留的介面,我們使用setter injection來完成這個依賴注入,而不是將招呼語寫死在HelloBean,BeanFactory是整個Spring的重點所在,整個Spring的核心都圍繞著它,在這邊使用的是XmlBeanFactory,負責讀取XML組態檔案,當然我們也可以使用properties檔案,這之後會再介紹。

BeanFactory讀取Bean的組態設定並完成關係維護之後,我們可以藉由getBean()方法並指定Bean的別名來取得實例,來看看實際運行之後的效果:\n
2004/10/21 上午 10:28:00 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
資訊: Loading XML bean definitions from resource for InputStream
2004/10/21 上午 10:28:00 org.springframework.beans.factory.support.AbstractBeanFactory getBean
資訊: Creating shared instance of singleton bean 'helloBean'
Hello!Justin!


如果今天您要想改變招呼語,則只要更改bean.xml就可以了,不用修改主要的程式,從比較一般的角度來看,就意味著如果您想要改變一些物件之間的依賴關係,則只要修改組態檔即可,而不用修改組件的任何一行程式。

2.Re:第一個Spring程式 [Re: justin_here] Copy to clipboard
Posted by: floater
Posted on: 2004-10-21 11:42

XmlBeanFactory factory = new XmlBeanFactory(is);

change this to:

BeanFactory factory = new XmlBeanFactory(is);

so factory is now an interface, there are several concrete BeanFactory classes. This is to avoid singleton problem.

another convention is the field name should match the getter and setter for smooth reading.

Don't forget you can still programatically set the field(e.g., for testing purpose), Spring just gives us one more way to do things.

3.Re:第一個Spring程式 [Re: justin_here] Copy to clipboard
Posted by: justin_here
Posted on: 2004-10-21 12:55

謝謝您的建議,我已經對原文作了修正。。。。Smile

這只是首篇,我還會繼續撰寫一系列的入門文章。。。。Shy


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923