first spring program

Spring程序
Spring Gossip: 第一个 Spring 程序
首先要取得Spring的相关档案,Spring的档案放在 SourceForge。

撰写此文时,Spring最新的版本是1.2.5,有两个下载版本,一个是spring-framework-1.2.5-with- dependencies.zip,一个是spring-framework-1.2.5.zip,with-dependencies的包括一些 ant、jakarta-commons、struts、velocity等等其它开源Java项目的相依档案,如果您也需要这些相关档案,可以下载这个版本,如果您已经有这些相关档案,则只需要下载spring-framework-1.2.5.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 1.2之后,原先于spring-core.jar中与Bean相关的一些套件,现在已移至spring-beans.jar中。

就这边接下来要练习的第一个Spring程序,要将spring-core.jar、spring-beans.jar,以及相依的commons- logging.jar加至Classpath的路径中,您可以在lib目录的jakarta-commons目录中找到。

来撰写您的第一个组件(Component),它只是一个简单的JavaBean,用来向使用者打声招呼:

HelloBean.java
package onlyfun.caterpillar; public class HelloBean {     private String helloWord;         public void setHelloWord(String helloWord) {         this.helloWord = helloWord;     }     public String getHelloWord() {         return helloWord;     } }

稍后您可以透过setHelloWord()这个Setter来设定新的招呼语,不过并不是亲自撰写程序来作这些事,而是在组态档案定义,由Spring 来为您作设定的动作,接着可以撰写Bean的定义档案,定义档案会告诉Spring容器,如何完成相依对象的关系注入等动作,Bean定义档的名称可以自由定义,例如这边取名为beans-config.xml:

beans-config.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>

定义档中定义了JavaBean的别名与来源类别,<property>卷标中设定了希望注入至JavaBean的字符串值,撰写一个简单的示范程序:

SpringDemo.java
package onlyfun.caterpillar; import org.springframework.core.io.FileSystemResource;import org.springframework.core.io.Resource;import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; public class SpringDemo {     public static void main(String[] args) {         Resource rs =             new FileSystemResource("beans-config.xml");         BeanFactory factory =             new XmlBeanFactory(rs);                 HelloBean hello =             (HelloBean) factory.getBean("helloBean");         System.out.println(hello.getHelloWord());     } }

BeanFactory是 Factory 模式 的一个实作例子,但用途更为一般,可以建立、管理不同型态的对象,由于这边所使用的Bean定义档是XML,所以使用实作BeanFactory接口的 XmlBeanFactory来作为管理Bean的实际对象,在Spring 1.2中,XmlBeanFactory只接受实作Resource接口的对象,像是ClassPathResource、 FileSystemResource、InputStreamResource、ServletContextResource、 UrlResource等,分别表示不同的档案来源对象,这边所使用的是FileSystemResource,表示指定相对路径或绝对路径来取得 Bean定义档, 同样的,如果您的Bean定义文件是位于Classpath路径中,您也可以使用ClasspPathResource来取得定义档。

这是从比较低层次的角度来使用Spring的IoC容器功能,藉由BeanFactory来读取组态档案并完成依赖的关联注入,这边的依赖是什么?指的是 HelloBean相依于String对象,透过Setter所保留的接口,使用Setter injection来完成这个依赖注入,而不是将招呼语写死在HelloBean,BeanFactory是整个Spring的重点所在,整个 Spring的核心都围绕着它,在这边使用的是XmlBeanFactory,负责读取XML组态档案,您也可以使用properties档案,这之后会再介绍。

BeanFactory读取Bean的组态设定并完成关系维护之后,可以藉由getBean()方法并指定Bean的别名来取得Bean实例,如果使用 BeanFactory的话,只有在真正需要Bean对象时,才会实际建立Bean实例,而不是在一开始建立BeanFactory时就建立Bean实例,来看看实际运行之后的效果:
2005/10/16 下午 07:14:03 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
        信息: Loading XML bean definitions from file [C:\workspace\SpringDemo\beans-config.xml]
        Hello!Justin!

如果今天您要想改变招呼语,则只要更改beans-config.xml就可以了,不用修改主要的程序,从比较一般的角度来看,就意味着如果您想要改变一些对象之间的依赖关系,则只要修改组态档即可,而不用修改组件的任何一行程序。

猜你喜欢

转载自fantaoyalin.iteye.com/blog/1507668
今日推荐