快速学习使用Spring MVC的注解及三层架构

Spring MVC 是一个非常流行的 Java Web 框架,它允许开发人员快速构建高效且可扩展的 Web 应用程序。下面我将为您简要介绍 Spring MVC 的核心注解和三层架构,并提供一个简单的代码示例来展示这些概念的实际应用。

Spring MVC 核心注解

  1. @Controller: 标记一个类为 Controller,Spring 会扫描这个类并识别其中的方法,与前端发来的请求进行匹配。
  2. @RequestMapping: 用于定义 URL 映射。它可以作用在类或者方法上,用于指定请求的 URL、请求方法(GET、POST 等)、请求参数等。
  3. @ResponseBody : 指示方法的返回值应该直接写入 HTTP 响应体,而不是作为视图名称解析为视图页面。通常与 @RestController 注解(该注解是 @Controller@ResponseBody 的组合)一起使用,用于构建 RESTful Web 服务。
  4. @ModelAttribute: 用于绑定方法参数到命名的模型属性,或者将方法返回值添加到模型中。它也可以用于在 Controller 中定义一个全局的模型属性。
  5. @Autowired: 自动装配 Spring Bean。它可以用在字段、构造器或者 setter 方法上,让 Spring 自动注入依赖。

三层架构

在 Spring MVC 中,常见的三层架构包括:表示层(Controller 层)、业务逻辑层(Service 层)和数据访问层(DAO 层或 Repository 层)。

  1. 表示层(Controller 层): 负责接收用户的请求,调用业务逻辑层进行处理,并返回处理结果给用户。这一层主要处理 HTTP 请求和响应。
  2. 业务逻辑层(Service 层): 负责处理核心的业务逻辑,通常会调用数据访问层来获取或存储数据。
  3. 数据访问层(DAO 层或 Repository 层): 负责与数据库进行交互,执行 SQL 查询或更新操作。在 Spring 中,可以使用 Spring Data JPA、MyBatis 等框架来简化数据访问层的开发。

示例代码

下面是一个简单的 Spring MVC 项目结构示例,包括 Controller、Service 和 DAO 层的代码。

1. Controller 层

java 复制代码
@Controller
@RequestMapping("/users")
public class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/{id}")
    @ResponseBody
    public User getUser(@PathVariable("id") Long id) {
        return userService.getUserById(id);
    }
}

2. Service 层

java 复制代码
@Service
public class UserService {
    private final UserDao userDao;

    @Autowired
    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    public User getUserById(Long id) {
        return userDao.findUserById(id);
    }
}

3. DAO 层(使用 Spring Data JPA)

java 复制代码
@Repository
public interface UserDao extends JpaRepository<User, Long> {
    // 这里继承了 JpaRepository,因此可以直接使用其提供的方法来操作数据库,例如 findById() 等。
}

在这个示例中,UserController 负责处理与 /users 路径相关的 HTTP 请求。当用户发送 GET 请求到 /users/{id} 时,getUser() 方法会被调用,并通过 UserServiceUserDao 来获取指定 ID 的用户信息。最后,获取到的用户信息会被直接写入 HTTP 响应体返回给客户端。

相关推荐
惠惠软件4 分钟前
豆包 AI 学习投喂与排名优化指南
人工智能·学习·语音识别
V搜xhliang024618 分钟前
OpenClaw、AI大模型赋能数据分析与学术科研 学习
人工智能·深度学习·学习·机器学习·数据挖掘·数据分析
云烟成雨TD38 分钟前
Spring AI Alibaba 1.x 系列【18】Hook 接口和四大抽象类
java·人工智能·spring
里昆1 小时前
【电力电子】某模拟量采集器的上位机设置和遇到的问题解决
学习
卖报的大地主1 小时前
TPAMI 2026 | 判别和扩散生成学习融合的礼物:边界细化遥感语义分割
人工智能·笔记·学习
Flittly3 小时前
【SpringSecurity新手村系列】(2)整合 MyBatis 实现数据库认证
java·安全·spring·springboot·安全架构
徒 花3 小时前
HCIP学习19 BGP 跨自治系统互通综合实验
网络·学习·智能路由器·hcip·ensp
码喽7号3 小时前
vue学习六:状态管理VueX
javascript·vue.js·学习
jiayong233 小时前
第 13 课:分页、页码状态和 URL 同步
开发语言·前端·javascript·vue.js·学习
xuhaoyu_cpp_java3 小时前
MySql学习(四)
数据库·经验分享·笔记·sql·学习·mysql