CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Java 生态与工具链/课时/Play Framework
RawBlame
课时目录12 节

Java 生态与工具链

  1. 01Java 生态地图
  2. 02数据库访问
  3. 03Hibernate 深入
  4. 04EBean ORM
  5. 05日志框架
  6. 06Javadoc 与文档
  7. 07Play Framework
  8. 08Javalin 微框架
  9. 09REST Assured
  10. 10JMeter 性能测试
  11. 11Java 加密基础
  12. 12综合练习

Play Framework

play-framework;响应式 Web。

30 分钟

Play Framework

Spring Boot 之外,Java 世界还有 Play——基于 Akka 的异步 Web 框架,路由即函数、模板即视图。本课让你体验「非 Spring」的 HTTP 编程模型,对照 spring-boot-essentials 理解 MVC 差异,并衔接 java-core-essentials 的 Future/CompletionStage 概念。

学习目标

  • 用 Play 定义路由、Controller 与 JSON 响应
  • 理解 Action 的异步返回 CompletionStage<Result>
  • 判断 Play 与 Spring Boot 各自适合的项目形态

路由与 Controller

conf/routes:

GET     /api/books/:isbn     controllers.BookController.show(isbn: String)
POST    /api/books            controllers.BookController.create
public class BookController extends Controller {
    private final BookService books;

    @Inject
    public BookController(BookService books) {
        this.books = books;
    }

    public Result show(String isbn) {
        return books.findByIsbn(isbn)
            .map(book -> ok(Json.toJson(book)))
            .orElse(notFound("book not found: " + isbn));
    }

    public CompletionStage<Result> create(Http.Request request) {
        BookForm form = Json.fromJson(request.body().asJson(), BookForm.class);
        return books.saveAsync(form)
            .thenApply(id -> created(Json.newObject().put("id", id)));
    }
}

Play 用 Guice 注入依赖;@Inject 构造器与 Spring 类似,但无 @RestController 魔法——路由文件显式绑定 URL。

异步 Action

Play 鼓励 I/O 密集操作用非阻塞线程:

public CompletionStage<Result> index() {
    return CompletableFuture.supplyAsync(() -> books.listAll())
        .thenApply(list -> ok(Json.toJson(list)));
}

线程池由框架管理,避免「一请求一线程」在高并发下耗尽 Tomcat 线程——这与 Spring WebFlux 的设计哲学相近,但 API 风格不同。

Play vs Spring Boot

维度PlaySpring Boot
路由routes 文件声明注解 @GetMapping
模板Twirl(Scala 模板)Thymeleaf / 前后端分离
生态中小规模、Scala/Java 混用企业标准、starter 丰富
学习需理解 async Action
同步 MVC 上手更快

Play 3.x 已迁移到 Pekko(Akka 分支);新项目若团队无 Play 经验,生产选型仍优先 Spring Boot——本课价值在 拓宽视野、读懂异步 Web。

练习

  • 用 Play Java 模板创建 GET /health 返回 JSON {"status":"ok"}
  • 把 jev-ebean 的 BookService 包一层 Play Controller,实现 show + create
  • 对比同一接口在 Play 与 Spring @RestController 下的代码行数与文件数

小结

Play 用显式路由与异步 Action 组织 Web 层,是 Spring 之外的重要参考系。 下一课看更轻量的 Javalin 微框架。

加载本节练习…
← 上一课Javadoc 与文档下一课 →Javalin 微框架