SpringMVC基础平台补充(2016.03.03)

  如果想要开发SpringMVC,那么前期依次安装好:JDK(jdk-8u74-windows-x64,安装后配置环境变量JAVA_HOME和CLASS_PATH,然后在PATH中添加bin目录)、Eclipse(eclipse-jee-mars-2-win32-x86_64,解压免安装)和Apache(apache-tomcat-7.0.68-windows-x64,解压后给环境变量配置一下CATALINA_HOME,然后执行service.bat进行注册即可)。

-----------------------------------------------------------------------------------------------------

  今天开始正式学习Spring框架,首先讲安装,spring 的版本发布中,有的版本有同步发布依赖包的下载,有的却没有。3.0.2的版本有, 而3.2.3 的版本却没有(可能是因为依赖库没有改变的缘故)。

1、下载Spring

  这里只是为了学习,下载3.0.2版本的:http://s3.amazonaws.com/dist.springframework.org/release/SPR/spring-framework-3.0.2.RELEASE-dependencies.zip

2、配置Spring

  Sping安装包解压后可以发现,全部内容都集中在dist子目录里面包含的jar文件。在Spring工程中使用这些jar文件就行了,不存在安装的问题。将Spring文件夹放到一个固定的位置存放起来,等Eclipse工程创建时动态指定一下即可,或者直接把Spring的jar文件全部拷贝到工程目录中去:

# unzip spring-framework-3.0..RC3-with-docs.zip
# cp spring-framework-3.0..RC3 /home/xiaoku/ -arf

3、下载工具类库

  这里下载两个辅助类库,分别是commons-logging-1.2-bin.tar.gzantlr-runtime-4.4.jar

  简单介绍一下这两个库的作用:

(1)commons-logging.jar:Spring 的必备包,用来记录程序运行时的活动的日志记录。类似与java平台中的log4j和JDK Logging API等,但如果你希望你的日志记录与实现无关,你可以使用Apache Commons Logging,它使用抽象的API,这些API都是实现无关的,可以让你在不同的日志记录实现之间切换,而不需要修改你的代码,它会在发布时根据环境来选择不同的具体底层实现。可以参考一下官网的描述

(2)antlr-runtime-4.4.jar:ANTLR(ANother Tool for Language Recognition)是一个可以接受含有语法描述的语言描述符并且生成程序能够识别这些语言所产生的句子。主要类有两种:Lexer(文法分析器类)和Parser(解析器类)。可以参考IBM网站给出的说明或者官网的文档说明

  这两个类库既可以添加到CLASSPATH环境变量中,也可以直接由Eclipse进行位置指定。 

4、配置Spring入门工程实例

  创建一个Java工程,在创建完工程后,右键点击工程名称,选择Build Path -> Configure Build Path -> Libraries 标签页,点击Add External JARs,加载相应的库文件,加载完成后如下图所示:

  更好的(2016.03.03)方式我觉得可以是在Eclipse中配置“User Libraries”,这样的话某一类库都会在一个目录下,方便管理(工程中要用的话再在上述页面中选择“Add Library”-->“User Library”就能找到了!),在Window-->Preferences-->Java-->Build Path下可以找到,参见下图所示:

  注意:上面的这个描述是有问题的,如果以“User Library”的形式导入,虽然可以让工程目录显得很规整,但是会存在一个问题就是工程报错“Class ** Not found!”。原因是:

“WebappClassLoader加载器专门负责加载webapps下面各个web项目的WEB-INF下的类库。而我们通过user library引入的jar包自然不会被WebappClassLoader加载器加载,所以必然会报ClassNotFoundException。”

5、创建两个类和一个Spring配置文件

  这里是一个简单的例子,分别创建两个类:HelloWorld和MainApp,内容如下:

package com.xiaoku;

public class HelloWorld {
private String message; public void getMessage() {
System.out.println("输出信息:" + message);
} public void setMessage(String message) {
this.message = message;
}
}
package com.xiaoku;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld obj = (HelloWorld) context.getBean("helloWorld"); obj.getMessage();
}
}

  配置文件放在src目录下,起名为Beans.xml,在MainApp中指定了。内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<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.0.xsd"> <bean id="helloWorld" class="com.xiaoku.HelloWorld">
<property name="message" value="Hello World!"/>
</bean> </beans>

  注意确保这个Beans.xml文件在CLASSPATH环境变量中可用。这里的CLASSPATH包含了当前路径,所以是符合要求的。Beans.xml文件中定义的bean控制具体的对象,并且可以指定对象的值而无需修改java源文件。

 6、执行Spring实例

  要做到这一点,保持 MainApp.Java 文件选项卡激活并使用在Eclipse IDE中提供 Run 选项,或使用Ctrl + F11可以编译并运行应用程序MainApp。如果一切顺利那么应用程序这将打印以下信息在 Eclipse IDE 控制台:

十二月 27, 2014 11:48:38 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6e2c634b: startup date [Sat Dec 27 23:48:37 CST 2014]; root of context hierarchy
十二月 27, 2014 11:48:38 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [Beans.xml]
十二月 27, 2014 11:48:38 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@3f102e87: defining beans [helloWorld]; root of factory hierarchy
输出信息:Hello World!

小结:

  1. 本篇文章算是Spring入门教程了,从安装到工程执行,完成了全套过程;
  2. 在MainApp.java中通过ClassPathXmlApplicationContext来获取xml配置文件的内容,并得到相应的Bean创建对象,就能够操作该对象了;
  3. 通过修改Beans.xml可以控制程序的具体内容,无需修改Java源文件,可以看到Spring 框架的灵活特性。

Spring入门学习(一)的更多相关文章

  1. [Spring入门学习笔记][静态资源]

    遗留问题 在上一节课的作业中,我们一定遇到了一点问题——虽然将页面内容正确的返回给了浏览器,但是浏览器显示的样式却是不正确的,这是因为在HTML的\标签中我们这样引入了CSS资源: <link ...

  2. [Spring入门学习笔记][创建网站URL]

    设计网站的URL 现代的Web站点都会设计一套拥有明确意义,方便用户记忆的URL,不论是域名还是路径,以天码营为例: http://tianmaying.com/courses表示网站下所有的课程列表 ...

  3. [spring入门学习笔记][spring的IoC原理]

    什么叫IoC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency ...

  4. Spring入门学习推荐

    该作者的 spring 博客很好,作为学习用 简介 https://blog.csdn.net/column/details/15088.html?&page=1 https://blog.c ...

  5. [Spring入门学习笔记][Spring的AOP原理]

    AOP是什么? 面向切面编程 软件工程有一个基本原则叫做“关注点分离”(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的问题.这年头互联网也 ...

  6. [Spring入门学习笔记][Spring Boot]

    什么是Spring Boot Spring Boot正是在这样的一个背景下被抽象出来的开发框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速.敏捷地开发新一代基于Spring框架 ...

  7. Spring入门学习(二)三种实例化bean的方法

    前面的哪一种就是通过构造函数来实例化对象 下面我们可能用到工厂方法来视力话对象,这样我们的配置文件又该怎么配置呢 <bean name="service2" class=&q ...

  8. Spring入门学习(一)

    Spring的主要功能是控制反转和面向切面编程,下面我们就来编写第一个spring的程序来体验一下控制反转 首先是加载配置文件 <?xml version="1.0" enc ...

  9. Spring入门学习笔记(4)——JDBC的使用

    目录 Spring JDBC框架概览 JdbcTemplate类 配置数据源 数据访问对象(Data Access Object,DAO) 执行SQL命令 Spring JDBC框架概览 使用传统的J ...

随机推荐

  1. 转:Web.config配置文件详解(新手必看)

    转:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html 花了点时间整理了一下ASP.NET Web.config配置文件 ...

  2. error: failed to initialize alpm library

    这个问题出在archlinux上面 [root@sarch pacman]# pacman -Syuerror: failed to initialize alpm library(database ...

  3. python数据结构与算法——小猫钓鱼(使用队列)

    按照<啊哈>里的思路实现这道题目,但是和结果不一样,我自己用一幅牌试了一下,发现是我的结果像一点,可能我理解的有偏差. # 小猫钓鱼 # 计算桌上每种牌的数量 # 使用defaultdic ...

  4. Ultra Pull To Refresh下拉刷新

    http://www.jcodecraeer.com/a/opensource/2014/1205/2111.html

  5. python 批量爬取代理ip

    import urllib.request import re import time import random def getResponse(url): req = urllib.request ...

  6. Python简史

    Python简史 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python是我喜欢的语言,简洁,优美,容易使用.前两天,我很激 ...

  7. 1-3 ISO/OSI七层模型详解

    一.物理层 1.负责设备之间的比特流的传输.物理接口.电气特性等. <1>物理接口:网线接口型号.音频线接口型号.视频线接口型号等 <2>电气特性:例如网线总共8根线,这8根线 ...

  8. hdu1827 强连通

    题意:一个人需要联系其他所有人,已知他自己联系每个人的花费,并且他可以联系某个人再让他联系他能联系到的人,给出一系列关系表示 A 能够联系 B.问他最少需要联系多少人,花费多少钱 首先,建成一个有向图 ...

  9. 越狱Season 1-Episode 7: Riots, Drills and the Devil: Part 2

    Season 1, Episode 7: Riots, Drills and the Devil: Part 2 -Pope: Belick, get those guys in line guy: ...

  10. JS的prototype的共享机制分析

    function Super(){ } Super.prototype.aaa=[1,2,3]; Super.prototype.bbb=1; function Sub(){ Super.call(t ...