关闭

Spring 攻略第001讲

标签: springjavaioceclipsegradle
210人阅读 评论(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
查看评论

Spring 攻略第001讲续

继续上一讲··· 为 Bean 配置集合     List, Set 和 Map 是代表 Java 三种主要集合类型的核心接口,而对于每一种集合类型,Java都用不同函数和特性提供了多种可选的实现。在 Spring 中,这些集合类型可...
  • zhulx_sz
  • zhulx_sz
  • 2016-06-03 15:05
  • 188

第001讲:我和Python的第一次亲密接触 | 课后测试题及答案

点击打开链接第001讲:我和Python的第一次亲密接触 | 课后测试题及答案
  • GoodLuckAC
  • GoodLuckAC
  • 2015-10-22 16:21
  • 487

Spring 攻略第002讲

调用构造程序创建 Bean 首先,假定你打算开发一个在线销售产品的购物应用程序。先创建一个Product 类,这个类有多个属性,例如产品名称和价格。因为商店中有许多类型的产品,所以你定义Product 类为抽象类,用于不同产品子类的扩展。 这次我们参照前面讲过的知识新建一个名为“spring_rec...
  • zhulx_sz
  • zhulx_sz
  • 2016-06-06 18:18
  • 229

Spring 攻略第004讲

默认情况下,Spring 将集合中的所有元素都当作字符串来对待。因此,如果你的集合元素不想被当作字符串的话,就必须为它们指定数据类型。 在 Spring 中······
  • zhulx_sz
  • zhulx_sz
  • 2016-06-17 12:07
  • 189

Spring 攻略第003讲

指定Bean 引用 组成应用程序的 Bean 往往需要相互协作才能完成应用任务。为了Bean 之间的相互访问,你必须在 Bean 配置文件中指定Bean 引用。为此,Spring 提供了 标签为 Bean 属性或者构造方法参数指定 Bean 引用。 回忆一下之前的序列生成器示例,其前缀只接受字符...
  • zhulx_sz
  • zhulx_sz
  • 2016-06-08 15:39
  • 237

001:我和Python的第一次亲密接触

内容来源于网络,本人只是在此稍作整理 这部分内容我希望结合小甲鱼的《零基础入门学习Python》的视频和《Head_First_Python》来学习,作为一名立志成为苦逼程序员的大学生,希望通过写博客的这种方式来监督我打好基础真正学习好这门语言。 练习题(来自小甲鱼官方论坛) 0. Py...
  • junwei0206
  • junwei0206
  • 2015-03-17 22:01
  • 574

数字格式化 把“1”格式化为“001”或“001”转换为1

//数字格式化 int k = 1; DecimalFormat mFormat = new DecimalFormat("000");//确定格式,把1转换为001 String s = mFormat.format(k); System.out.println...
  • Dr_abandon
  • Dr_abandon
  • 2016-09-10 09:35
  • 2211

001我和Python的第一次亲密接触---学习笔记

(出处: 鱼C论坛) 《零基础入门学习Python》 测试题: 0. Python 是什么类型的语言? 1. IDLE 是什么? 2. print() 的作用是什么? 3. Python 中表示乘法的符号是什么? 4. 为什么 >>>print('I love...
  • zjq001X
  • zjq001X
  • 2017-07-28 15:20
  • 328

spring 学习攻略

转载自:http://geek.csdn.net/news/detail/115029 刚刚进入研一,想想先把Java的基础打扎实,然后捧着一本厚厚的spring攻略在啃,看了很多了,下面讲一下主要的技术点,spring还是一个比较轻量级的框架,相比于之前的ssh(Struts+Spring+...
  • JasonZhangOO
  • JasonZhangOO
  • 2016-12-04 22:23
  • 1002

《the cave》攻略及感悟

《the cave》这款游戏是一个智力解谜游戏,寒假太无聊,又不想刷题,于是把这个游戏给通关了,哈哈。        我玩的是汉化版的,里面的英语基本上不到1/3吧,贴个链接吧:《the cave》《the cave》     ...
  • shiyuankongbu
  • shiyuankongbu
  • 2013-02-22 22:49
  • 30223
    个人资料
    • 访问:16191次
    • 积分:931
    • 等级:
    • 排名:千里之外
    • 原创:72篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论