Skip to content

六、给前端的学习路径

后端代码量大,不要试图一次全看完。 按照下面这个顺序,每一步集中看一个点,效率最高。


Step 1:理解网关(入口层)

学什么

  • 请求从哪里进来
  • 怎么路由到目标服务
  • 怎么做身份验证

看哪些文件

  1. 网关路由配置application.yml)—— 看请求如何被分发到各服务
  2. 认证过滤器AuthFilter.java)—— 看 token 怎么校验
  3. 入口类GatewayApplication.java)—— 看服务怎么启动

类比帮你理解

text
Spring Cloud Gateway 的运作方式:

请求进来

  ├── 匹配路由规则(predicate)   ← 类似 Nginx 的 location 匹配
  │     /api/user/** → 转发到用户服务
  │     /api/ai/**   → 转发到 AI 服务

  ├── 经过过滤器链(filters)     ← 类似 Express 的 middleware 链
  │     AuthFilter → RateLimitFilter → ...

  └── 转发到目标服务

你能学到

  • Spring Cloud Gateway 的路由机制
  • token 校验的典型实现
  • 请求头在微服务间传递的方式

Step 2:看一个最简单的业务服务

学什么

Controller → Service → Repository 的完整链路(后端三层架构)

看哪些文件

  1. ControllerUserController.java)—— 接口入口,看 URL 和参数
  2. Service 实现LoginRegisterServiceImpl.java)—— 核心业务逻辑
  3. EntityUserMst.java)—— 数据模型(数据库里存了什么)
  4. RepositoryUserMstRepository.java)—— 数据库查询

怎么读

text
① UserController.login(LoginDto dto)
   → "哦,POST /v1/user/login 接口接收一个 LoginDto"

② 跟进 service.login(dto)
   → "哦,先验证验证码,再查用户,再调认证服务获取 token"

③ 看到 userRepository.findByLoginAndUserType(...)
   → "哦,这就是在 MongoDB 里按手机号查用户"

④ 看到 authFeignClient.getToken(...)
   → "哦,这就是在调认证服务的接口"

你能学到

  • 后端"三层架构"的职责分工
  • Spring 注解的基本用法
  • MongoDB Repository 的声明式查询

Step 3:理解服务间通信(Feign Client)

学什么

服务之间怎么互相调用

看哪些文件

  1. Feign 接口定义AuthFeignClient.java
  2. Feign 调用方(搜 aiFeignClient / userFeignClient 的使用处)
  3. Fallback 降级AiFeignFallback.java
  4. Feign 全局配置FeignConfiguration.java

核心概念

java
// 声明式 HTTP 客户端(你定义接口,Feign 自动发 HTTP 请求)
@FeignClient(name = "auth-service", url = "${service.auth.url}",
             fallback = AuthFeignFallback.class)
public interface AuthFeignClient {

    @PostMapping("/oauth/token")
    RtData<TokenResponse> getToken(@RequestBody TokenRequest request);
}

// 降级处理(远程服务挂了怎么办)
@Component
public class AuthFeignFallback implements AuthFeignClient {
    @Override
    public RtData<TokenResponse> getToken(TokenRequest request) {
        return RtData.fail("认证服务暂时不可用");  // 返回兜底数据
    }
}

💡 前端类比:

typescript
// 前端版的 "Feign Fallback"
async function getToken(req) {
  try {
    return await axios.post('/oauth/token', req)
  } catch (e) {
    return { code: -1, message: '认证服务暂时不可用' } // fallback
  }
}

你能学到

  • 声明式 HTTP 客户端的写法
  • Fallback 降级保护
  • 请求头透传(requestId、uid 等)

Step 4:理解异步流程(消息队列)

学什么

RocketMQ 如何实现异步任务

看哪些文件

  1. 发消息工具类RocketMQUtils.java
  2. 消费者注解@RocketMQMessageListener
  3. 推送式消费者ImageResultConsumer.java
  4. 拉取式消费者ImageGenerateTaskPullConsumer.java

消息流转图

text
发送方                              消费方
──────                              ──────

画布服务                             AI 服务
  │                                    │
  ├─── 发送 "请生成图片" 消息 ──▶ MQ   │
  │                                    │
  │                                    ├── 从 MQ 拉取消息
  │                                    ├── 调用 AI API
  │                                    ├── 发送 "图片已生成" 消息 ──▶ MQ
  │                                    │
  ├── 从 MQ 接收结果消息 ◀─────────────┘
  ├── 上传图片到 OSS
  ├── 更新任务状态

你能学到

  • 生产者-消费者模式
  • 推送 vs 拉取两种消费模式
  • 异步任务处理的典型架构

Step 5:理解数据访问层

学什么

后端怎么操作数据库

看哪些文件

  1. MongoDB 配置MongoAutoConfiguration.java
  2. 通用 RepositoryCustomRepository.java
  3. 自定义查询实现XxxCustomRepositoryImpl.java
  4. MySQL 配置MybatisPlusConfig.java
  5. MyBatis SQL 映射XxxMapper.xml

Repository 方法命名规则

java
// Spring Data 根据方法名自动生成查询,规则如下:
findByLogin(String login)
// → WHERE login = ?

findByLoginAndUserType(String login, String userType)
// → WHERE login = ? AND userType = ?

findByUidIn(Collection<Long> uids)
// → WHERE uid IN (?)

findByCreatedAtBetween(Date start, Date end)
// → WHERE createdAt BETWEEN ? AND ?

countByUserType(String userType)
// → SELECT COUNT(*) WHERE userType = ?

💡 是不是很神奇?只要按命名规则写方法名,不需要自己写查询语句!

你能学到

  • Spring Data MongoDB 的 Repository 模式
  • MongoTemplate 手动查询(用于复杂场景)
  • MyBatis XML SQL 映射(用于 MySQL)

Step 6:阅读一个完整的复杂模块

学什么

真实业务模块中用到的设计模式

看哪些文件

  1. ControllerImageController.java)—— 入口
  2. Service 接口ImageTaskService.java
  3. Service 实现ImageTaskServiceImpl.java)—— 策略模式

你会在代码里看到的设计模式

模式在哪里解决什么问题前端类比
策略模式图片生成策略选择不同 AI 模型用不同处理逻辑switch(type) 但更优雅
外观模式任务编排 Service封装多个子步骤为一个方法封装复杂的连续 API 调用
自定义注解@PaidFeature标记需要付费的功能类似 @needAuth 装饰器

你能学到

  • 策略模式如何让代码从 if-else 泥潭中解脱
  • 外观模式如何简化复杂调用
  • 自定义注解的实际用法