这一篇在前一篇Springmvc的基础上,加上Spring。Spring的主要用途叫做控制反转(依赖注入,IoC/DI)和面向切面的编程(AOP),本文只介绍IoC,因为AOP主要的应用场景是记录日志,暂时不需要,等我要整合的几个框架都整合在一起的时候再加上。

pom.xml不需要新添加任何东西,因为spring-core等包都在导入spring-webmvc的时候作为依赖项被导入了,所以直接来看配置。

1. web.xml

Spring要在程序需要某个对象的时候,把这个对象的实例注入进去,默认情况下,Spring以单例的形式维护了所有需要注入的对象的实例,哪里需要就把对应的实例给哪里,Spring自己对实例、程序运行的管理构成了Spring自己的容器,第一步就是要在web.xml中注册,初始化这个容器:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/META-INF/applicationContext.xml</param-value>
</context-param> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

这里注册一个ContextLoaderListener,并指定spring配置文件的位置,在类路径下的/META-INF/applicationContext.xml,现在在maven的resources资源包下,即src/main/resources下面创建目录META-INF,在这个目录下创建applicationContext.xml,这个文件就是spring的配置文件。

2. applicationContext.xml

applicationContext.xml是spring的核心配置文件,spring4和之前版本的一个很大的区别,就是推荐情况下bean不是在xml文件中配置,而是通过扫描固定annotation的类,根据对象的类型或者名字自动加载,以前在applicationContext.xml需要配置大量的bean,现在不用了,但是仍然要告诉spring,去哪个包下面找这些带着annotation等着被扫描的类:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
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.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd"> <context:component-scan base-package="org.zhangfc.demo4ss.service"/> </beans>

前面这一堆东西先不用管,直接粘贴好了,其实很多现在还用不到,不过也没有关系,先放在这好了,真正有用的配置就一句话,需要spring管理的类,请到org.zhangfc.demo4ss.service下面去找。

3. UserService.java

下面写一个服务类,用来获得注册用户列表,创建package:org.zhangfc.demo4ss.service,在下面创建接口UserService,写一个方法获取所有用户名。

public interface UserService {
public List<String> getAllUsernames();
}

再创建一个类UserServiceImpl,实现这个接口:

@Service
public class UserServiceImpl implements UserService { public List<String> getAllUsernames() {
List<String> users = new ArrayList<String>();
users.add("zhangsan");
users.add("lisi");
users.add("wangwu");
return users;
} }

这里比较关键的就是@Service这个annotation,它告诉Spring,我是一个Service,需要你来管理我。

4. HomeController

回到控制器里,上一篇文章我写了一个方法叫json来返回一个json对象,现在改一下这个方法,通过前面写的UserService来获取用户列表并返回给客户端。

首先定义一个类的全局变量UserService:

@Autowired
private UserService userService;

这里要注意的是Autowire这个annotation,它是为了告诉spring,这个对象没有实例化,需要你来注入一个UserService的实例,那问题就是,UserSerivce是一个接口,不指定谁知道你想用的实现类是哪个,Spring会首先看自己的容器里有没有一个叫做userService的对象(刚才那个UserServiceImpl的对象名字就叫做userServiceImpl),如果找不到就在配置文件里配置的路径下面寻找UserService的实现类,找到了就把它的对象拿过来,除此之外刚才Service那个annotation还可以指定一个value:

@Service("userService")

这样一来,对于UserServiceImpl这个类的实例,Spring给它起的名字就不是userServiceImpl了,而是userService,如果某个接口的实现类有多个,就可以使用这种方法来指定用哪个实现类,个人认为,如果每个接口都只有一个实现类,那么这么做确实很方便,但如果有多个实现类并且可能会更换的话,就不如配置文件明了了(当然了,现在这种方式也可以把参数抽出来放到配置文件里,不过还是麻烦一些)。

然后修改json方法:

@RequestMapping("/json")
@ResponseBody
public List<String> json(){
return userService.getAllUsernames();
}

Spring在这里的作用就是把HomeController需要的userService注入进来,运行程序,访问http://localhost:8080/demo4springmvc-spring/json:

["zhangsan","lisi","wangwu"]

源码下载

Spring的另一个功能AOP暂且不用,等需要记录日志的时候再写,当然,Spring本身也有很多复杂的机制,后面在具体问题中慢慢介绍。

【JavaEE】Springmvc+Spring整合及example的更多相关文章

  1. Mybatis+Springmvc+Spring整合常用的配置文件

    1.创建web项目 2.导入mabatis spring springnvc 需要的jar包 3.创建mybatis,spring,springmvc的配置文件 (1)web.xml配置文件 < ...

  2. Mybatis+SpringMVC+Spring整合

    1,先添加spring支持: applicationContext.xml  配在WEBINF下,四个命名空间:aop,context,tx,p 配Listener:ContextLoaderList ...

  3. spring,配置文件applictionContext.xml,Mybatis mybatis.xml,springMVC spring整合springMVC mybatis

  4. 框架篇:Spring+SpringMVC+hibernate整合开发

    前言: 最近闲的蛋疼,搭个框架写成博客记录下来,拉通一下之前所学知识,顺带装一下逼. 话不多说,我们直接步入正题. 准备工作: 1/ IntelliJIDEA的安装配置:jdk/tomcat等..(本 ...

  5. idea+springmvc+spring+mybatis+maven整合返回json数据webapi

    首先看一张目录结构图: : 创建步骤: 1.创建maven  webapp工程, 创建完后的目录结构为: 2.添加项目依赖(添加jar包) 需要的jar包: spring-webmvc, spring ...

  6. 框架篇:Spring+SpringMVC+Mybatis整合开发

    前言: 前面我已搭建过ssh框架(http://www.cnblogs.com/xrog/p/6359706.html),然而mybatis表示不服啊. Mybatis:"我抗议!" ...

  7. SpringMVC+Spring+Hibernate整合开发

    最近突然想认真研究下java web常用框架,虽然现在一直在用,但实现的整体流程不是很了解,就在网上搜索资料,尝试自己搭建,以下是自己的搭建及测试过程. 一.准备工作: 1/安装并配置java运行环境 ...

  8. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  9. 3.springMVC+spring+Mybatis整合Demo(单表的增删该查,这里主要是贴代码,不多解释了)

    前面给大家讲了整合的思路和整合的过程,在这里就不在提了,直接把springMVC+spring+Mybatis整合的实例代码(单表的增删改查)贴给大家: 首先是目录结构: 仔细看看这个目录结构:我不详 ...

随机推荐

  1. 【转】蘑菇街面试经历(已拿到offer)

    最近正好接到了蘑菇街的面试通知,顿时很欣喜,还在等通知,不知结果如何. 首先安排了一次电话面试,大体内容时现在工作的一个状态,主要负责的项目功能,模块,以及架构例如,高并发网站优化,负载均衡等等,还会 ...

  2. 我也来说说js的事件机制

    原文链接:http://www.w3cfuns.com/notes/17398/8062de2558ef495ce6cb7679f940ae5c.html 学js,不懂事件机制,基本可以说学了js,就 ...

  3. Navicat 破解版的安装

    因为电脑系统换掉,重装系统,重新配置了一下环境,安装Navicat,现记录一下过程,以便下次查询使用. 我们首先百度搜索一款navicat for mysql然后进行下载. 2 当我们下载完成之后首先 ...

  4. 浅谈C#委托和事件(转载)

    委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本 ...

  5. CSDN日报20170413 ——《天天写业务代码的那些年,我们是怎样成长过来的》

    [程序人生]天天写业务代码的那些年,我们是怎样成长过来的 作者:Phodal 比起写业务代码更不幸的是,主要工作是修 Bug , bug , buG , bUg. [Java 编程]Springboo ...

  6. CMAKE 编译报错

    报错如下: CMake Error: your C compiler: "CMAKE_C_COMPILER-NOTFOUND" was not found. 没有安装 gcc 和 ...

  7. 让Mac支持lrzsz

    http://blog.csdn.net/citywolf4/article/details/49071679 https://github.com/mmastrac/iterm2-zmodem

  8. [GraphQL] Query a GraphQL API with graphql-request

    To query a GraphQL API, all you need to do is send an HTTP request that includes the query operation ...

  9. 【HTML 元素】嵌入图像

    img元素允许我们在HTML文档里嵌入图像. 要嵌入一张图像需要使用src和alt属性,代码如下: <img src="../img/example/img-map.jpg" ...

  10. S1:适配器 Adapter

    将一个类的接口转换为用户期望的另外一个接口.适配器使得原本由于接口不兼容而不能一起工作的类可以一起工作   UML: 一.类适配器: class A { public function methodA ...