在你开始前
关于本教程
本教程将帮助您学习使用Swing和依赖项注入 (也称为控制反转(IOC))进行应用程序开发的Spring框架的基础。 在简要概述了Spring和依赖项注入之后,本教程的大部分内容是动手操作的,逐步引导您使用Spring创建功能齐全的Swing应用程序(待办事项列表程序)。 本演练包括用于构建环境的三个选项,每个选项都有详细的设置说明。 您将在此过程中学习Spring框架的基本用法和好处。 一路包括其他相关概念的说明。 您还将进行一些旁听,以在教程代码的上下文中学习一些好的编程实践。
最后一部分是对Spring Rich Client(RCP)框架的简要概述,该框架是Spring框架的子项目,致力于为在Spring下开发富客户端Swing应用程序提供平台。 本教程不包括使用Spring RCP的分步说明,而是一个获取源代码和自行探索项目的起点。
本教程显示了您需要键入的每段新代码。 也提供了完整的源代码(请参阅下载 )。 可下载的源代码是通过直接从本教程开始并粘贴代码而创建的,因此它应无错误,并且与后续操作相同。 因为您将使用Java编程语言编写GUI应用程序,所以它将在运行Java代码的任何平台上运行。
本教程并非旨在全面概述Spring框架或Swing。 它不涉及使用Spring创建Web应用程序或访问数据库,也不涉及诸如Spring对面向方面的编程(AOP)的支持之类的更高级的主题。 探索本教程的相关主题的书籍,文章,教程和在线参考,涵盖春,摆在更大的广度和细节。
先决条件
本教程的读者是Java开发人员。 它旨在提供多种经验水平的访问,即使您熟悉一个主题,您仍可能会学到另一个主题。 一些部分讨论了相关的设计模式和开发方法。 如果您不感兴趣或已经熟悉它们,可以随意浏览。 以下知识和技能水平将有所帮助:
- 熟悉Java编程语言的基础知识,Java Bean组件的约定以及使用Java语言进行基本应用程序设计和开发的经验。
- 某些构建环境的基本知识-Eclipse,Apache Ant或Apache Maven(请参阅参考资料 )。 但是,即使您不熟悉这些环境,也可以按照教程中相当详细的说明使用它们。 如果您有一个问题,可以尝试其他两个之一或全部。
- XML语法的基本知识-元素,属性以及如何维护格式良好的XML文档(请参阅参考资料 )。
您需要一台安装了JDK的计算机(在最后一节中需要JDK 1.5才能运行Rich Client Project演示),并且需要一个Internet连接来下载所需的工具和库。
以下之一是必需的,或者您可以使用自己的构建环境或IDE:
- Apache Ant版本1.6.1或更高版本,可从http://ant.apache.org获得。
- Apache Maven版本1.0.2或更高版本,可从http://maven.apache.org获得。
- Eclipse 3.0、3.1或更高版本,可从http://www.eclipse.org获得。
用于下载所需依赖项JAR的选项
为了减少启动本教程所需的前期下载工作量,该教程的源代码中的Ant和Maven构建脚本均提供了对从公共存储库自动下载所需的依赖项JAR(包括Spring本身)的支持。 该功能内置于Maven中,由get-dependencies
目标在Ant脚本中提供。 要在Eclipse中使用这些功能,必须安装Ant或Maven。 您可以在“ 环境设置”中找到更多详细信息。
如果愿意,可以手动获得正确的必需JAR版本。 只需参考Ant build.xml文件中的get-dependencies
目标(请参见清单1 ),找出需要哪些JAR和版本,以及从中下载它们的URL。
Spring和依赖注入概述
什么是Spring框架?
Spring框架Web站点以以下描述欢迎访问者:“作为领先的全栈Java / J2EE应用程序框架,Spring为许多项目带来了显着的好处,减少了开发工作量和成本,同时提高了测试覆盖率和质量”(请参阅参考资料 )。 该通用语句指示了Spring的范围和大小。 简而言之,Spring提供了许多工具和方法,使编写和测试Java和J2EE应用程序变得更加容易。 本教程仅说明了依赖注入的基本用法,但Spring包含许多其他服务和框架的有用且易于使用的包装器,以及高级功能,例如对面向方面的编程(AOP)的支持(请参阅参考资料 )。
有关更多Spring概述和背景信息,请查看项目的任务书,developerWorks上Spring系列 ,和其他物品的相关主题 。
什么是依赖注入?
依赖注入(DI),也称为控制反转(IOC),是一种软件开发方法,其中,单独的对象或框架(例如Spring框架)负责创建对象并将其“注入”到其他对象中。依靠他们。 这导致了代码之间的松散耦合,并且易于测试和重用。
请访问Martin Fowler的站点,以获取有关DI / IOC的一些不错的描述(请参阅参考资料 )。
环境设定
选择您的构建环境
在开始对示例应用程序进行编码之前,您需要设置一个环境来构建和运行它。 如果您对Java编程有足够的经验,可以自行完成构建和运行,则可以跳至创建待办事项列表:Basic Swing和Spring应用程序设置 。
您可以从三个选项中选择一个构建环境(请参阅先决条件 )。 您可以选择一个自己熟悉的人,也可以尝试一个新的人来接触它。 您可以使用任何一种或全部三种:
- Apache Ant:您可以从命令行(要求您下载并安装Ant)或从IDE(例如Eclipse)中运行Ant构建脚本。
- Apache Maven:Maven是一种流行的构建环境。 要使用它,必须下载并安装它,但是本教程中包含了使用Maven构建所需的所有必需配置文件。
- Eclipse:请注意,即使使用Eclipse进行构建和运行,仍然需要获取库JAR依赖项,然后在Eclipse类路径中定义对这些依赖项的引用。 您可以使用Ant或Maven构建脚本将所需的依赖项自动下载到本地计算机,或自己下载它们。 您可以在“ 设置Eclipse”中找到更多详细信息。
设置蚂蚁
如果您选择了Ant作为构建环境:
- 安装Ant并确保Ant可执行文件在您的路径上。
- 在命令行中键入
ant -version
以验证是否正确安装了Ant。 或者,您可以从所选的IDE或其他工具中使用Ant。 - 在操作系统或IDE中配置Ant之后,创建一个名为todo的目录。 该目录将包含您的所有项目文件。
- 在目录的根目录中创建build.xml构建脚本,如清单1所示。
注意:出于演示目的,代码清单中的某些行在您通常不会拆分的地方拆分。 在某些情况下,例如清单1,这将导致您必须修复无效的文件。 在这种情况下,代码清单中会内联包含一个NOTE,指示您删除该便笺,并将各行连接在一起,且不能使用空格。 (Ant看起来足够聪明,可以从URL中删除换行符和空格,但是最好还是使它们看起来不错。)
清单1. build.xml
<project name="todo" default="default">
<property name="build.dir" location="build"/>
<property name="lib.dir" location="lib"/>
<path id="classpath">
<pathelement location="${build.dir}"/>
<fileset dir="${lib.dir}"/>
</path>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="get-dependencies">
<mkdir dir="${lib.dir}"/>
<get dest="${lib.dir}/commons-logging-1.0.3.jar"
usetimestamp="true" ignoreerrors="true"
src="//www.ibiblio.org/maven/
NOTE: The URL in the lines above and below this note was split for
readability. Delete this note and join the URL with no spaces
commons-logging/jars/commons-logging-1.0.3.jar"/>
<get dest="${lib.dir}/spring-1.2.3.jar"
usetimestamp="true" ignoreerrors="true"
src= "http://www.ibiblio.org/maven/
NOTE: The URL in the lines above and below this note was split for
readability. Delete this note and join the URL with no spaces
springframework/jars/spring-1.2.3.jar"/>
</target>
<target name="compile">
<mkdir dir="${build.dir}/classes"/>
<javac srcdir="src"
destdir="${build.dir}/classes"
classpathref="classpath"
encoding="UTF8"
debug="on"
deprecation="on"
/>
<copy todir="${build.dir}/classes" overwrite="true">
<fileset dir="src">
<include name="**/*.xml"/>
</fileset>
</copy>
</target>
<target name="run" depends="compile">
<java classname="todo.ToDo" fork="true">
<classpath>
<path refid="classpath"/>
<pathelement location="${build.dir}/classes"/>
</classpath>
</java>
</target>
<target name="default" depends="get-dependencies, compile, run"/>
</project>
通过Ant自动下载依赖项
现在,运行get-dependencies
通过输入目标, ant get-dependencies
在命令行上或者在您的IDE或编辑器运行目标。 您应该看到如下所示的输出:
Buildfile: build.xml
get-dependencies:
[mkdir] Created dir: D:\projects\todo\lib
[get] Getting: http://www.ibiblio.org/
maven/commons-logging/jars/commons-logging-1.0.3.jar
[get] Getting: http://www.ibiblio.org/maven/
springframework/jars/spring-1.2.3.jar
BUILD SUCCESSFUL
Total time: 30 seconds
在本教程的后面,将指示您使用Ant脚本中的其他目标。 主要的脚本是clean
, compile
和run
,其行为与大多数标准Ant脚本一样。
设置Maven
如果您选择使用Maven作为构建环境:
- 安装Maven并确保Maven可执行文件在您的路径上。 有关更多详细信息,请参阅Maven站点上的文档(请参阅参考资料 )。
- 在命令行中键入
maven -v
以显示版本并验证Maven是否已正确安装。 您可以通过Eclipse或Maven插件在Eclipse中使用Maven。 有关详细信息,请参见Maven网站。 - 在操作系统或IDE中配置Maven之后,创建一个名为todo的目录。 该目录将包含您的所有项目文件。
- 在todo目录的根目录中创建project.xml(请参见清单2)和maven.xml(请参见清单3)。
清单2. project.xml
<?xml version="1.0" encoding="UTF-8"?>
<project>
<pomVersion>3</pomVersion>
<id>todo</id>
<name>To Do List</name>
<currentVersion>1.0</currentVersion>
<organization>
<name>To Do List Inc.</name>
<url>http://localhost/notavailable</url>
<logo>http://maven.apache.org/images/jakarta-logo-blue.gif</logo>
</organization>
<inceptionYear>2005</inceptionYear>
<package>todo</package>
<logo>http://maven.apache.org/images/maven.jpg</logo>
<description>A To Do List</description>
<shortDescription>A To Do List</shortDescription>
<url/>
<issueTrackingUrl/>
<siteAddress/>
<siteDirectory/>
<distributionDirectory>/notavailable/</distributionDirectory>
<repository>
<connection/>
<url/>
</repository>
<mailingLists/>
<developers/>
<dependencies>
<dependency>
<groupId>springframework</groupId>
<artifactId>spring</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.0.3</version>
</dependency>
</dependencies>
<build>
<nagEmailAddress/>
<sourceDirectory>src</sourceDirectory>
<unitTestSourceDirectory/>
<unitTest/>
<resources>
<resource>
<directory>src</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
清单3. maven.xml
<project default="test"
xmlns:m="maven"
xmlns:ant="jelly:ant">
<goal name="run">
<ant:path id="run.classpath" >
<ant:pathelement path="${maven.test.dest}"/>
<ant:pathelement path="${maven.build.dest}"/>
<ant:path refid="maven.dependency.classpath"/>
</ant:path>