Fork me on GitHub

SpringMVC学习3-加入业务层

Spring MVC

SpringMVC是基于MVC思想的JAVA WEB实现框架,是Spring家族的一员,它基于前置控制器来接收并分发请求,支持参考验证、请求参数封装、拦截、Restful等功能,是目前较为流行的MVC框架

本系列学习笔记包含如下的课程内容:

  • MVC思想
  • Hello案例
  • 请求和响应处理
  • 文件上传和下载处理
  • 参数验证
  • 请求拦截
  • RESTful风格
  • 日志

Dependency Injection

  • 将组件之间的依赖, 从编译期间,延后至运行期间.
  • 组件无需自己实例化依赖, 所有依赖由容器提供.
  • 实现组件之间依赖的进一步松耦合, 更利于组件的复用

准备 Service 组件

com.tz.service.HelloService

1
2
3
4
5
6
7
8
/**
* Hello Service
*/
public interface HelloService {

String sayHi(String name);

}

com.tz.service.HelloServiceImpl

1
2
3
4
5
6
7
8
9
10
11
12
13
import org.springframework.stereotype.Service;

/**
* Hello Service 实现类
*/
@Service
public class HelloServiceImpl implements HelloService {

public String sayHi(String name) {
return "Hello, " + name;
}

}

提供 ServiceConfig

方便后面对业务层做单元测试
com.tz.service.ServiceConfig

1
2
3
4
5
6
7
8
9
10
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
* Service Layer Config
*/
@Configuration
@ComponentScan
public class ServiceConfig {
}

依赖注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import com.tz.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/**
* Hello Controller
*
* @author: steven
* @since 2016-10-28
*/
@Controller//当前类是一个控制器, 是对之前的代码修改,加入到业务层对象
public class HelloController {

@Autowired
private HelloService helloService; //基于DI,自动注入业务层对象

//将 URL 映射到方法
@RequestMapping("/hello")
public String hello(HttpServletRequest request, Model model) {
String name = request.getParameter("name");
//调用 Service组件的方法
String result = helloService.sayHi(name);
model.addAttribute("result", result); //稍后会自动转为 request 对象的 attribute
return "/WEB-INF/jsp/hello.jsp";
}

}

运行和调试