
之前面试的时候遇到的问题能替换语法上能跑但绝对不能替换架构上绝对不行1. 语法上确实能互换从 Spring 源码看ControllerServiceRepositoryComponent底层全部都是 Component全部都会被 Spring 管理全部能注入全部能调用。所以你把 Controller 改成 Service项目照样跑你把 Service 改成 Controller也能跑2. 但真正的区别不是规范是【Spring 给它们加的特殊功能】这才是面试官想听的①Controller 有额外功能能接收前端请求只有加了Controller/RestControllerSpringMVC 才会扫描里面的RequestMapping/GetMapping把方法暴露成接口让前端能访问Service 没有这个功能你把 Controller 改成 Service前端立刻访问不了接口全部失效②Service 有额外功能AOP / 事务 / 日志增强Spring 会对Service做很多增强事务Transactional日志监控异步缓存AOP 切面这些增强默认只针对 Service 层Controller 一般不做这些增强。③Mapper / Repository 是给 MyBatis 用的是为了让框架知道这个类是干嘛的应该给它开什么功能生成 DAO 代理连接数据库执行 SQLController 和 Service 做不了。职责分离 功能增强 框架识别Controller 接收请求SpringMVC 只认它Service 处理业务事务、AOP 只认它Mapper 操作数据库MyBatis 只认它你应该这样回答满分答案** 语法上可以互换因为底层都是 Component但实际项目中绝对不能互换原因有三点**Controller 会被 SpringMVC 管理用于接收前端请求提供接口Service 用于业务逻辑支持事务、AOP 等增强功能两者职责不同框架赋予的功能不同互换会导致接口不可用、事务失效、架构混乱。