主流后端架构模型mvc架构
上图是mvc架构模型,后端编码会把事件处理分为controller、model、view三层
- contaller 是控制器处理响应业务前的基本处理、例如调度model、分发请求
- model 是业务处理模型层负责业务逻辑,包含servicer业务处理、dao数据持久化
- view 是响应处理层它处理model的响应结果将响应通过view层返回给contaller,相当与中间人
spring对于MVC架构的实现
通过阿里巴巴的spring boot 脚手架实现 https://start.aliyun.com/
添加spring mvc依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
实现数据持久化 添加mybatis plus的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>
还要添加数据库驱动及jdbc依赖这里不演示了
完成后创建如下包
这里假设我要做一个api接口,对于view层其实是在contaller中完成
先写一个controller作为演示 ,先不涉及model的交互
/**
* 演示controller
*/
@Controller
@RequestMapping("/demo")
public class DemoController {
@ResponseBody
@RequestMapping(value = "/demo1",method = RequestMethod.GET)
public String demo1() {
return "demo1";
}
}
访问后出现demo1 我们此时已经完成controller的简单搭建细说下代码
- @Controller 注解,表明这个类是一个controller他会在启动时自动注册为一个bean
- @RequestMapping 在类上表明这个类的uri访问路径为"/demo"
- @RequestMapping 在方法上表明这个方法的uri访问路径为"/demo1" ,method限定了请求方法为GET
- @ResponseBody 会把返回结果序列化添加到Response的body中会调用mvc自己的json解析器
- 其实这里可以把@Controller 替换为 @RestController,同时配套@GetMapping、@PostMapping等注解,不用再使用@ResponseBody
交互使用model层
这里不再推荐使用字段注解注向Controller 注入service 因为会出现service构建失败出现null的场景
使用构造函数注入
先创建一个service 并实现它
package com.example.demo.service;
public interface IDemoService {
String doSomething();
}
package com.example.demo.service.impl;
import com.example.demo.service.IDemoService;
import org.springframework.stereotype.Service;
@Service
public class DemoServiceImpl implements IDemoService {
@Override
public String doSomething() {
return "漠北银虎";
}
}
修改controller
package com.example.demo.controller;
import com.example.demo.service.IDemoService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 演示controller
*/
@Controller
@RequestMapping("/demo")
public class DemoController {
private IDemoService demoService;
public DemoController(IDemoService demoService) {
this.demoService = demoService;
}
@ResponseBody
@RequestMapping(value = "/demo1",method = RequestMethod.GET)
public String demo1() {
return demoService.doSomething();
}
}
重启后再次访问
已经返回了我们service中的返回值
- @Service 注解说明该类是一个service 启动时会字自动注入一个bean
- 在Controller注入IDemoService接口会自动注入它的实现类DemoServiceImpl,假如IDemoService有多个实现类呢???后面再说
至此你已经学会了基本的spring mvc的使用,别急啊~还有很多相关知识在本章不讲这章只做入门