关闭

Spring 攻略第001讲

标签: springjavaioceclipsegradle
180人阅读 评论(0) 收藏 举报
分类:

相信大部分从事过 Java 开发的人都听说过 Spring 框架,Spring 框架是一个构建企业级应用程序的轻量级的一站式解决方案。而且,Spring 框架是模块化的,允许你只使用那些
你需要的部分,而无需引入其所有部分。你可以在任何框架之上去使用 IOC 容器。Spring 框架支持声明式事务管理,通过RMI或 Web 服务远程访问你的逻辑,并支持多种选择以持久化你的数据。它还提供了一个全能的 MVC 框架,使你能够将 AOP 透明地集成到你的软件中。Spring 的设计还是非侵入性的,也就是说你的领域逻辑代码一般对框架本身无依赖性。

本系列博文假定你对 Spring 框架有一定的了解,而不是从零开始,关于 Java 和 Spring 框架的一些基础知识,请读者自行解决。

准备工作:

1、本博文系列 IDE 均采用 Eclipse Mars (即 4.5.2 版) Java EE;

2、jar 依赖管理采用 gradle,对应的gradle版本为2.1,对应的 Eclipse 插件为 Buildship;

3、JDK 版本至少为 7;

4、Tomcat 版本至少为 8;


JDK、Eclipse 和 Tomcat 的安装不在本博文讲解范围,请读者自行解决。下面从如何安装 gradle 插件 Buildship 开始讲起。

首先,假设你的电脑能正常上网,并假设上面提到的各种软件或工具的安装路径如下:

JDK - C:\Java\jdk1.8

JRE - C:\Java\jre8

gradle - C:\Java\gradle-2.1

Eclipse - C:\Java\eclipse

Tomcat - C:\Java\Tomcat 8.0

第二,启动 Eclipse 集成开发环境,然后点击菜单 Help -> Eclipse Marketplace...,稍等片刻后在弹出截面中的 Find: 文本输入框中输入 Buildship 然后点击查找按钮(输入框里的那个小放大镜图标)进行搜索,如下图所示:


然后点击上图中第一个 Install 按钮,并根据向导一路走下去,以完成插件的安装。

第三,安装完成后,我们最好确认一下插件是否安装成功,点击菜单Help -> About Eclipse,将弹出如下对话框:


左边起,如果出现如第四个绿色的“G”字样的图标,就表示安装成功了。

 

到现在为止,我们的准备工作一切就绪,下面我们将尝试创建我们的第一个 gradle 项目:

点击 File -> New -> Project...,将弹出如下对话框:


在上述对话框中选择如上图中所示那个 Gradle -> Gradle Project 向导,接着点击 Next > 按钮进入下一步

欢迎页面,不用理会它继续点击 Next 按钮进入下一步,如下图所示:


此时在 Project Name 中填入项目名称,我们输入 spring_recipes_001 作为我们的项目名称,接着Next 进入下一步,如下图所示:

此时,我们选择自己安装好的本地 gradle 路径,如上图中所示。

最后按 Finish 按钮即可完成创建,完成后的项目结构如下图所示:



为我们的项目添加 Spring 框架相关的 jar 包,双击打开上图中的 build.gradle 配置文件,并在 dependencies 配置节中加入一行(Spring 版本以 3.2.17.RELEASE 为例):

compile 'org.springframework:spring-context:3.2.17.RELEASE'

 

加入后的内容大致如下所示:

 

dependencies {

    compile'org.slf4j:slf4j-api:1.7.5'

    compile'org.springframework:spring-context:3.2.17.RELEASE'

 

    testCompile'junit:junit:4.11'

}

 

加入并保存后,右击我们的项目,然后选择Gradle -> Refresh Gradle Project,接着 gradle 会帮助我们完成我们需要的 spring jar 包的导入工作,jar 包的依赖问题也不用我们担心,一切都由 gradle 自动完成,如果一切正常的话,此时我们的项目结构应该大致如下:



实例化 Spring IOC容器

    你必须实例化Spring IOC 容器,读取其配置来创建 bean 实例。Spring提供两种 IOC 容器实现类型:最基本的一种是 BeanFactory亦即 Bean工厂;另一种更高级的是Application Context亦即应用程序上下文。但是这两种 IOC容器类型的 Bean配置文件是相同的。

Bean工厂对应的接口是BeanFactory;应用程序上下文对应的接口是 ApplicationContext。而ApplicationContext接口是与 BeanFactory兼容的子接口。

ApplicationContext仅仅是一个接口,你必须实例化这个接口的实现。默认有ClassPathXmlApplicationContext实现,它从 classpath 中装入一个 XML 配置文件,并构建一个应用程序上下文,例如:

ApplicationContext context = new ClassPathXmlApplicationContext(“beans.xml”);

    另外Spring 还提供了其他多种 ApplicationContext 实现,包括用于从文件系统或者URL 装入 XML 配置文件的 FileSystemXmlApplicationContext实现,以及仅用于 Web和入口应用程序的XmlWebApplicationContext XmlPortletApplicationContext实现。


IOC容器中得到 Bean

    为了从bean 工厂或者应用程序上下文中得到已经声明的 bean,我们只需要调用getBean()方法并传递一个唯一的 bean名称即可。getBean()方法返回的类型为 java.lang.Object,所以在使用之前必须将其转换为实际的类型,就像这样:

SequenceGenerator generator = (SequenceGenerator) context.getBean(“sequenceGenerator”);

 

示例

首先,创建 Bean 类,在项目的源码目录src/main/java 下新建一个名为“sesametech.springrecipes.s001”的包,然后在该包下创建名为 SequenceGenerator 的类:

packagesesametech.springrecipes.s001;

 

public class SequenceGenerator {

 

       private String prefix;

       private String suffix;

       private int initial;

       private int counter;

 

       public SequenceGenerator() {

       }

 

       publicSequenceGenerator(Stringprefix, Stringsuffix,intinitial) {

              this.prefix =prefix;

              this.suffix =suffix;

              this.initial =initial;

       }

 

       public synchronized String getSequence(){

              StringBufferbuffer = new StringBuffer();

              buffer.append(prefix);

              buffer.append(initial +counter++);

              buffer.append(suffix);

              return buffer.toString();

       }

 

       getter & setter …

}

 

其次,创建 Bean 配置文件,在项目的源码目录src/main/java 下新建一个名为“beans.xml”的XML 文件,并加入 Spring 专有的 Schema 声明:

<beans

       xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

……

</beans>

 

每个 bean 都应该提供一个唯一的id 或者 name 属性,以及一个完全限定类名,用于给Spring IOC 容器对其进行实例化。而对于每个简单类型的 bean 属性,你可以通过设值方法为其配置一个属性,对于这种配置属性的方式是通过使用<property> 元素,并在其中 name 特性中指定属性名称,然后在其下指定一个<value> 元素。这种方式要求 bean 必须包含一个对应的设值方法(即setter 方法)。对于本示例的配置如下:

       <bean

              id="sequenceGenerator"

              name="sequenceGenerator"

              class="sesametech.springrecipes.s001.SequenceGenerator">

              <propertyname="prefix">

                     <value>30</value>

              </property>

              <propertyname="suffix">

                     <value>A</value>

              </property>

              <propertyname="initial">

                     <value>100000</value>

              </property>

       </bean>

 

第三,创建测试类,在项目的源码目录“sesametech.springrecipes.s001”的包下创建名为 SequenceGeneratorTest 的测试类:

packagesesametech.springrecipes.s001;

 

importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

 

public class SequenceGeneratorTest{

 

       @SuppressWarnings("resource")

       public static void main(String[] args) {

              ApplicationContextcontext = newClassPathXmlApplicationContext("beans.xml");

              SequenceGeneratorgenerator = (SequenceGenerator)context.getBean("sequenceGenerator");

              System.out.println(generator.getSequence());

              System.out.println(generator.getSequence());

       }

 

}

 

最后,运行这个测试类,如果一切正常,你应该可以看到如下可能不太感兴趣的信息:

30100000A

30100000A

 

上面的方式是通过设值方式配置bean 属性。你还可以通过构造方法来配置 bean 属性,这种方式是通过使用<construct-arg> 元素来配置的,这个元素没有 name 属性,因为构造方法参数是基于位置的,对于本示例的配置如下:

       <bean

              id="sequenceGenerator"

              name="sequenceGenerator"

              class="sesametech.springrecipes.s001.SequenceGenerator">

              <constructor-arg>

                     <value>40</value>

              </constructor-arg>

              <constructor-arg>

                     <value>B</value>

              </constructor-arg>

              <constructor-arg>

                     <value>200000</value>

              </constructor-arg>

       </bean>

 

以上两种 bean 属性的配置方式稍显繁琐,Spring提供了更加简化的配置方式。

对于通过设值的方式,可以简化成如下简写形式:

       <bean

              id="sequenceGenerator"

              name="sequenceGenerator"

              class="sesametech.springrecipes.s001.SequenceGenerator">

              <propertyname="prefix"value="50"/>

              <propertyname="suffix"value="C"/>

              <propertyname="initial"value="300000"/>

       </bean>

 

对于通过构造方法的配置方式,可以简化成如下形式:

       <bean

              id="sequenceGenerator"

              name="sequenceGenerator"

              class="sesametech.springrecipes.s001.SequenceGenerator">

              <constructor-argvalue="60"/>

              <constructor-argvalue="D"/>

              <constructor-argvalue="400000"/>

       </bean>

 

最后,Spring 从2.0 版本开始,提供了另一种更加便利的简写形式,它使用 p schema 就像使用<bean> 元素中的属性一样来定义 bean 属性。增加p schema 声明后的内容如下粗体所示:

<beans

       xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:p="http://www.springframework.org/schema/p"

       xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

       <bean

              id="sequenceGenerator"

              name="sequenceGenerator"

              class="sesametech.springrecipes.s001.SequenceGenerator"

              p:prefix="70"p:suffix="E"p:initial="500000"/>

</beans>


好了,今天就写到这里吧,如果我的文章能够对你有所帮助,将是对我极大的鼓舞,欢迎拍砖~
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11699次
    • 积分:596
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类