1.1 @Controller注解的定义与作用
@Controller是Spring框架中一个特别重要的注解。它专门用来标记一个类作为Web请求的控制器。当你在类声明前加上@Controller注解,Spring容器就会自动识别这个类,把它纳入管理范围。
我记得刚开始学习Spring时,总是分不清各种注解的区别。有一次我创建了一个普通的Java类,试图用它处理Web请求,结果请求根本找不到对应的处理方法。后来加上@Controller注解,整个流程就顺畅多了。这个经历让我深刻理解到@Controller在Spring MVC中的核心地位。
从本质上讲,@Controller告诉Spring:"这个类专门负责接收用户请求,处理业务逻辑,然后返回相应的视图"。它像是Web应用的交通指挥中心,所有的HTTP请求都会先到达这里,再由它决定下一步该怎么做。
1.2 @Controller与其他Spring注解的区别
Spring提供了多个类似的注解,新手很容易混淆。@Controller、@RestController、@Service、@Repository看起来都很相似,但它们各自承担着不同的职责。

@Controller主要处理Web请求,通常与视图技术结合使用。它处理完请求后,通常会返回一个视图名称,由视图解析器找到对应的页面。相比之下,@RestController是@Controller和@ResponseBody的组合,专门用于构建RESTful API,直接返回数据而不是视图。
@Service注解标注业务层的组件,@Repository标注数据访问层的组件。虽然它们都能让Spring管理这些类,但语义上完全不同。在实际项目中,我倾向于严格遵循这种分层注解的使用规范,这样代码的可读性和维护性都会更好。

1.3 @Controller在MVC架构中的位置
在经典的MVC模式中,@Controller扮演着控制器的角色。它位于模型和视图之间,负责协调两者之间的交互。
当用户发起一个HTTP请求时,请求首先到达DispatcherServlet,然后由它找到对应的@Controller处理方法。控制器处理业务逻辑,可能会调用Service层获取或处理数据,最后返回一个视图名称。视图解析器根据这个名称找到具体的视图模板,渲染后返回给用户。
这种设计模式的优势很明显:各司其职,职责分离。模型负责数据,视图负责展示,控制器负责协调。我记得重构一个老项目时,把原本混杂在一起的业务逻辑和展示逻辑分开,代码立即变得清晰很多。@Controller在这个过程中起到了关键作用,它让整个请求处理流程变得标准化、可预测。 @Controller public class UserController {
// 控制器方法将在这里定义
}