Spring MVC 是一个非常流行的 Java Web 框架,它允许开发人员快速构建高效且可扩展的 Web 应用程序。下面我将为您简要介绍 Spring MVC 的核心注解和三层架构,并提供一个简单的代码示例来展示这些概念的实际应用。
Spring MVC 核心注解
- @Controller: 标记一个类为 Controller,Spring 会扫描这个类并识别其中的方法,与前端发来的请求进行匹配。
- @RequestMapping: 用于定义 URL 映射。它可以作用在类或者方法上,用于指定请求的 URL、请求方法(GET、POST 等)、请求参数等。
- @ResponseBody : 指示方法的返回值应该直接写入 HTTP 响应体,而不是作为视图名称解析为视图页面。通常与
@RestController
注解(该注解是@Controller
和@ResponseBody
的组合)一起使用,用于构建 RESTful Web 服务。 - @ModelAttribute: 用于绑定方法参数到命名的模型属性,或者将方法返回值添加到模型中。它也可以用于在 Controller 中定义一个全局的模型属性。
- @Autowired: 自动装配 Spring Bean。它可以用在字段、构造器或者 setter 方法上,让 Spring 自动注入依赖。
三层架构
在 Spring MVC 中,常见的三层架构包括:表示层(Controller 层)、业务逻辑层(Service 层)和数据访问层(DAO 层或 Repository 层)。
- 表示层(Controller 层): 负责接收用户的请求,调用业务逻辑层进行处理,并返回处理结果给用户。这一层主要处理 HTTP 请求和响应。
- 业务逻辑层(Service 层): 负责处理核心的业务逻辑,通常会调用数据访问层来获取或存储数据。
- 数据访问层(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()
方法会被调用,并通过 UserService
和 UserDao
来获取指定 ID 的用户信息。最后,获取到的用户信息会被直接写入 HTTP 响应体返回给客户端。