<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java 与 Spring 生态专题：从核心原理到企业微服务 on PlumePHP</title><link>https://plumephp.com/posts/java/</link><description>Recent content in Java 与 Spring 生态专题：从核心原理到企业微服务 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 01 Sep 2026 12:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/posts/java/index.xml" rel="self" type="application/rss+xml"/><item><title>Spring Cloud 微服务全栈实践</title><link>https://plumephp.com/spring-cloud-microservices/</link><pubDate>Tue, 01 Sep 2026 12:00:00 +0800</pubDate><guid>https://plumephp.com/spring-cloud-microservices/</guid><description>&lt;h2 id="1-微服务架构与-spring-cloud-alibaba"&gt;1. 微服务架构与 Spring Cloud Alibaba&lt;/h2&gt;
&lt;h3 id="11-微服务核心特征"&gt;1.1 微服务核心特征&lt;/h3&gt;
&lt;p&gt;微服务将单体拆分为围绕业务能力构建的小型自治服务，独立部署扩展：DDD 限界上下文拆分、独立 CI/CD、容错设计（熔断/限流/隔离）、基础设施自动化。&lt;/p&gt;</description></item><item><title>Java 17+ 核心语法深度指南</title><link>https://plumephp.com/java-core-fundamentals/</link><pubDate>Tue, 01 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/java-core-fundamentals/</guid><description>&lt;p&gt;Java 自 2018 年采用六个月发版节奏以来，语言特性演进速度显著加快。从 Java 8 的 Lambda 与 Stream，到 Java 17 的正式版 LTS，再到 Java 21 的虚拟线程与结构化并发，现代 Java 已不再是&amp;quot;冗长&amp;quot;的代名词。本文以 Java 17/21 为基线，系统梳理核心语法、面向对象设计、函数式编程、异常与并发处理、Stream 高阶用法、集合新 API 以及模块系统 JPMS，力求为日常工程实践提供可直接落地的深度参考。&lt;/p&gt;</description></item><item><title>Java 并发编程与 JUC 包深度指南</title><link>https://plumephp.com/java-concurrency-juc/</link><pubDate>Tue, 01 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/java-concurrency-juc/</guid><description>&lt;p&gt;Java 并发编程是现代后端开发的核心能力之一。本文将系统梳理 Java 并发技术从 &lt;code&gt;synchronized&lt;/code&gt; 到 &lt;code&gt;Lock&lt;/code&gt;、再到 JUC（&lt;code&gt;java.util.concurrent&lt;/code&gt;）工具包，直至 Project Loom 虚拟线程的完整演进路线。每个章节均配有可直接编译运行的完整代码与性能分析思路。&lt;/p&gt;</description></item><item><title>Java 性能优化实战：从 JIT/AOT 到 GraalVM 原生镜像</title><link>https://plumephp.com/java-performance-optimization/</link><pubDate>Tue, 01 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/java-performance-optimization/</guid><description>&lt;p&gt;在现代企业级应用与云原生架构中，Java 性能直接决定系统吞吐量、响应延迟和基础设施成本。从 JVM 的 JIT 即时编译，到 JDK 9 的 AOT 静态编译，再到 GraalVM 原生镜像的毫秒级启动，Java 性能优化领域经历了深刻变革。本文从 JVM 编译器底层出发，系统讲解 JIT/AOT 技术差异、GraalVM 原生镜像构建与配置、Spring Boot 3 原生编译支持、性能剖析工具链、JVM 启动与运行时优化，以及字符串、集合、IO 等高频优化点。&lt;/p&gt;</description></item><item><title>Java 测试策略：JUnit 5、Mockito、AssertJ 与 Testcontainers</title><link>https://plumephp.com/java-testing-mockito/</link><pubDate>Tue, 01 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/java-testing-mockito/</guid><description>&lt;p&gt;在现代 Java 工程中，测试不仅是质量保障的最后防线，更是驱动设计（TDD）与持续交付的核心环节。本文从测试金字塔出发，系统讲解 JUnit 5、Mockito、AssertJ、JaCoCo、Testcontainers 与 JMH 的实战用法，助你构建多层次、高覆盖、可信赖的 Java 测试体系。&lt;/p&gt;</description></item><item><title>JVM 多语言生态：Kotlin、Scala、Graal 与 Clojure 深度对比</title><link>https://plumephp.com/java-multilingual-jvm/</link><pubDate>Tue, 01 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/java-multilingual-jvm/</guid><description>&lt;h2 id="目录"&gt;目录&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-jvm-%E4%BD%9C%E4%B8%BA%E8%AF%AD%E8%A8%80%E5%B9%B3%E5%8F%B0%E5%AD%97%E8%8A%82%E7%A0%81%E4%B9%8B%E4%B8%8A%E7%9A%84%E7%BC%96%E7%A8%8B%E4%B8%96%E7%95%8C"&gt;JVM 作为语言平台：字节码之上的编程世界&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-kotlin%E4%B8%8E-java-%E6%97%A0%E7%BC%9D%E4%BA%92%E6%93%8D%E4%BD%9C%E7%9A%84%E7%8E%B0%E4%BB%A3%E8%AF%AD%E8%A8%80"&gt;Kotlin：与 Java 无缝互操作的现代语言&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-scala%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B%E7%9A%84%E7%86%94%E7%82%89"&gt;Scala：面向对象与函数式编程的熔炉&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#4-clojurelisp-%E7%B2%BE%E7%A5%9E%E5%9C%A8-jvm-%E4%B8%8A%E7%9A%84%E7%BB%BD%E6%94%BE"&gt;Clojure：Lisp 精神在 JVM 上的绽放&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#5-groovy%E5%8A%A8%E6%80%81%E8%84%9A%E6%9C%AC%E4%B8%8E%E5%B7%A5%E7%A8%8B%E6%95%88%E7%8E%87%E7%9A%84%E5%B9%B3%E8%A1%A1"&gt;Groovy：动态脚本与工程效率的平衡&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#6-graalvm-polyglot%E6%89%93%E7%A0%B4%E8%AF%AD%E8%A8%80%E8%BE%B9%E7%95%8C%E7%9A%84%E8%BF%90%E8%A1%8C%E6%97%B6"&gt;GraalVM Polyglot：打破语言边界的运行时&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#7-%E8%AF%AD%E8%A8%80%E9%80%89%E5%9E%8B%E5%85%A8%E7%BB%B4%E5%BA%A6%E5%AF%B9%E6%AF%94"&gt;语言选型全维度对比&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#8-%E6%B7%B7%E5%90%88%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98java--kotlin-gradle-%E5%B7%A5%E7%A8%8B"&gt;混合项目实战：Java + Kotlin Gradle 工程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#9-%E6%80%A7%E8%83%BD%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95%E8%A7%A3%E8%AF%BB"&gt;性能基准测试解读&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#10-%E6%9C%AA%E6%9D%A5%E8%B6%8B%E5%8A%BFkotlin-multiplatformloom-%E4%B8%8E-valhalla"&gt;未来趋势：Kotlin Multiplatform、Loom 与 Valhalla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#11-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98-faq"&gt;常见问题 FAQ&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="1-jvm-作为语言平台字节码之上的编程世界"&gt;1. JVM 作为语言平台：字节码之上的编程世界&lt;/h2&gt;
&lt;h3 id="11-字节码与-jit一切语言的共同后端"&gt;1.1 字节码与 JIT：一切语言的共同后端&lt;/h3&gt;
&lt;p&gt;Java 虚拟机（JVM）自 1995 年诞生以来，早已超越了 Java 语言的专属运行时，演变为一个通用的托管执行平台。JVM 的核心设计哲学是：&lt;strong&gt;编译到底层无关的字节码（Bytecode），由虚拟机执行并通过即时编译器（JIT）优化为机器码&lt;/strong&gt;。这一层抽象使得任何能编译为 JVM 字节码的编程语言，都能享受到跨平台、垃圾回收、性能优化和丰富的生态库。&lt;/p&gt;</description></item><item><title>Spring Boot 3 深度解析：自动装配、Starter 开发与生产就绪</title><link>https://plumephp.com/spring-boot-deep-dive/</link><pubDate>Tue, 01 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/spring-boot-deep-dive/</guid><description>&lt;blockquote&gt;
&lt;p&gt;本文面向已有 Spring 基础、希望深入 Spring Boot 3 内核的 Java 开发者。所有示例基于 Spring Boot 3.3.x 与 Java 21。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="一spring-boot-的设计哲学"&gt;一、Spring Boot 的设计哲学&lt;/h2&gt;
&lt;p&gt;Spring Boot 并非另起炉灶，而是对 Spring Framework 的&amp;quot;约定优于配置&amp;quot;（Convention Over Configuration）理念的极致演绎。其核心设计目标可概括为四点：&lt;/p&gt;</description></item><item><title>Spring Data JPA 高级指南：关联映射、N+1 与性能优化</title><link>https://plumephp.com/spring-data-jpa-advanced/</link><pubDate>Tue, 01 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/spring-data-jpa-advanced/</guid><description>&lt;p&gt;Spring Data JPA 是 Spring 生态中最主流的 ORM 封装方案，它屏蔽了绝大多数 JDBC 样板代码，让开发者以声明式方式操作数据库。然而，简单 CURD 与生产级应用之间存在巨大的性能鸿沟：一次不小心的 &lt;code&gt;EAGER&lt;/code&gt; 加载可能拖垮整个接口，一个缺失的索引会让分页查询变成全表扫描。本文从实体映射、关联设计、N+1 根治、批量写入、分页策略、审计、动态查询、二级缓存到事务传播，逐层递进，给出可直接落地的代码与配置。&lt;/p&gt;</description></item><item><title>Spring Security 6.x 与 OAuth2/JWT 安全认证实战</title><link>https://plumephp.com/spring-security-oauth2-jwt/</link><pubDate>Tue, 01 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/spring-security-oauth2-jwt/</guid><description>&lt;h2 id="概述"&gt;概述&lt;/h2&gt;
&lt;p&gt;企业级应用的安全认证从传统的 Session-Cookie 模式逐步演进到无状态 JWT + OAuth2 架构。Spring Security 6.x 基于 Jakarta EE namespace，全面支持 Spring Boot 3.x，内置对 OAuth2 Resource Server、Spring Authorization Server（取代已停止维护的 Spring Security OAuth）的一等支持。本文系统讲解 RBAC/ABAC 设计、Spring Security 过滤器链、OAuth2 四大授权模式与 PKCE、Spring Authorization Server 配置、JWT 签发与验证、资源服务器搭建、方法级安全、前后端分离 CORS 方案以及常见攻击防御和生产调优。&lt;/p&gt;</description></item><item><title>Spring WebFlux 反应式编程与 Reactor 实战</title><link>https://plumephp.com/spring-reactive-webflux/</link><pubDate>Tue, 01 Sep 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/spring-reactive-webflux/</guid><description>&lt;p&gt;反应式编程已成为构建高并发、低延迟服务的核心范式。Spring WebFlux 是 Spring 5 引入的完全非阻塞 Web 框架，依托 Project Reactor 实现，基于响应式流规范（Reactive Streams Specification）定义了 &lt;code&gt;Publisher&lt;/code&gt;、&lt;code&gt;Subscriber&lt;/code&gt;、&lt;code&gt;Subscription&lt;/code&gt;、&lt;code&gt;Processor&lt;/code&gt; 四个接口。本文从理论到实战，系统讲解 WebFlux 核心原理与工程实践。&lt;/p&gt;</description></item><item><title>JVM 内存模型与垃圾回收深度调优指南</title><link>https://plumephp.com/jvm-memory-gc-tuning/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://plumephp.com/jvm-memory-gc-tuning/</guid><description>&lt;h1 id="jvm-内存模型与垃圾回收深度调优指南"&gt;JVM 内存模型与垃圾回收深度调优指南&lt;/h1&gt;
&lt;p&gt;Java 虚拟机（JVM）的内存管理与垃圾回收机制是每一位后端开发者必须掌握的核心技能。理解 JVM 的内存布局、对象分配策略以及各类垃圾收集器的工作原理，不仅能够帮助我们在日常开发中写出更高效的代码，更能在生产环境出现性能瓶颈或内存泄漏时，快速定位问题并实施有效的调优方案。本文将从内存模型出发，系统性地梳理对象分配、GC 算法、主流收集器、日志分析、参数调优及内存泄漏排查等关键主题，并结合真实的生产案例，为读者提供一份可落地的深度调优指南。&lt;/p&gt;</description></item><item><title>Java 工程化构建：Maven 多模块与 Gradle 深度优化</title><link>https://plumephp.com/maven-gradle-build-optimization/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0800</pubDate><guid>https://plumephp.com/maven-gradle-build-optimization/</guid><description>&lt;p&gt;在 Java 企业级开发中，构建工具的选择与配置直接决定了团队协作效率、发布节奏与项目可维护性。Maven 与 Gradle 作为当前两大主流构建工具，在多模块管理、依赖治理、生命周期编排、增量构建与 CI/CD 集成等领域各有优势。本文从 POM 继承到 Gradle 配置缓存，从生命周期插件到远程构建缓存，全方位拆解 Java 工程化构建的核心技术点。&lt;/p&gt;</description></item><item><title>Java EE/Jakarta EE 三大规范详解：CDI、JPA 与 Bean Validation</title><link>https://plumephp.com/java-ee-jakarta-ee-san-da-jie-cdi-jpa-yu-bean-validation/</link><pubDate>Tue, 03 Jun 2025 11:20:37 +0800</pubDate><guid>https://plumephp.com/java-ee-jakarta-ee-san-da-jie-cdi-jpa-yu-bean-validation/</guid><description>&lt;h1 id="java-eejakarta-ee-三大规范详解cdijpa-与-bean-validation"&gt;Java EE/Jakarta EE 三大规范详解：CDI、JPA 与 Bean Validation&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id="一cdicontexts-and-dependency-injection上下文与依赖注入"&gt;一、CDI：Contexts and Dependency Injection（上下文与依赖注入）&lt;/h2&gt;
&lt;h3 id="1-cdi-简介"&gt;1. CDI 简介&lt;/h3&gt;
&lt;p&gt;CDI 是 Java EE 提供的依赖注入和生命周期管理标准，提供：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;类型安全的依赖注入机制&lt;/li&gt;
&lt;li&gt;生命周期与作用域控制&lt;/li&gt;
&lt;li&gt;拦截器、事件系统、装饰器等扩展功能&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="2-常用注解说明"&gt;2. 常用注解说明&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;注解&lt;/th&gt;
					&lt;th&gt;功能说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;@Inject&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;注入依赖对象&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;@Named&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;定义 Bean 名称，供 EL 表达式使用&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;@ApplicationScoped&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;应用作用域，整个应用生命周期&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;@RequestScoped&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;每个 HTTP 请求周期一个实例&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;@SessionScoped&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;每个 HTTP 会话一个实例&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;@Dependent&lt;/code&gt;（默认）&lt;/td&gt;
					&lt;td&gt;与注入点生命周期一致&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;@Produces&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;生产一个注入对象&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;@Qualifier&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;自定义限定符，用于区分同类 Bean&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="3-cdi-示例"&gt;3. CDI 示例&lt;/h3&gt;
&lt;h4 id="bean-类定义"&gt;Bean 类定义&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@ApplicationScoped&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;GreetingService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello, &amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="使用-inject-注入-bean"&gt;使用 &lt;code&gt;@Inject&lt;/code&gt; 注入 Bean&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@RequestScoped&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserController&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Inject&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GreetingService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;greetingService&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;handleRequest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;greetingService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Alice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="使用-produces"&gt;使用 &lt;code&gt;@Produces&lt;/code&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Resources&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Produces&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@RequestScoped&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EntityManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;produceEntityManager&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Persistence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createEntityManagerFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;myPU&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;createEntityManager&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="二jpajava-persistence-api持久化规范"&gt;二、JPA：Java Persistence API（持久化规范）&lt;/h2&gt;
&lt;h3 id="1-jpa-简介"&gt;1. JPA 简介&lt;/h3&gt;
&lt;p&gt;JPA 是 Java EE 标准 ORM 框架，提供实体映射、对象关系管理、查询语言（JPQL）等。&lt;/p&gt;</description></item><item><title>JAX-RS规范介绍</title><link>https://plumephp.com/jax-rs/</link><pubDate>Tue, 03 Jun 2025 11:06:48 +0800</pubDate><guid>https://plumephp.com/jax-rs/</guid><description>&lt;h1 id="jax-rs-规范详解"&gt;JAX-RS 规范详解&lt;/h1&gt;
&lt;h2 id="一什么是-jax-rs"&gt;一、什么是 JAX-RS？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;JAX-RS&lt;/strong&gt;（Java API for RESTful Web Services）是 Jakarta EE（原 Java EE）提供的一套用于构建 RESTful Web 服务的 API 规范。它定义了一套用于将 Java 类映射为 Web 资源的方法，广泛用于微服务、前后端分离架构和 API 开发。&lt;/p&gt;</description></item><item><title>Jakarta RESTful Web Services介绍</title><link>https://plumephp.com/jakarta-restful-web-services/</link><pubDate>Tue, 03 Jun 2025 10:59:10 +0800</pubDate><guid>https://plumephp.com/jakarta-restful-web-services/</guid><description>&lt;h1 id="jakarta-restful-web-servicesjakartawsrs详解"&gt;Jakarta RESTful Web Services（&lt;code&gt;jakarta.ws.rs&lt;/code&gt;）详解&lt;/h1&gt;
&lt;h2 id="一简介"&gt;一、简介&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;jakarta.ws.rs&lt;/code&gt; 是 Jakarta EE 规范的一部分，用于构建符合 REST 架构风格的 Web 服务。它是 JAX-RS（Java API for RESTful Web Services）的 Jakarta 命名空间版本，前身是 Java EE 的 &lt;code&gt;javax.ws.rs&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>Awesome Java</title><link>https://plumephp.com/awesome-java/</link><pubDate>Mon, 12 May 2025 12:50:20 +0800</pubDate><guid>https://plumephp.com/awesome-java/</guid><description>&lt;blockquote&gt;
&lt;p&gt;From: &lt;a href="https://github.com/akullpp/awesome-java"&gt;https://github.com/akullpp/awesome-java&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="awesome-java-awesome"&gt;Awesome Java &lt;a href="https://awesome.re"&gt;&lt;img src="https://awesome.re/badge.svg" alt="Awesome" loading="lazy" decoding="async" style="max-width: 100%; height: auto;"&gt;
&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A curated list of awesome Java frameworks, libraries and software.&lt;/p&gt;
&lt;h2 id="contents"&gt;Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#projects"&gt;Projects&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#architecture"&gt;Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#bean-mapping"&gt;Bean Mapping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#build"&gt;Build&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#bytecode-manipulation"&gt;Bytecode Manipulation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#caching"&gt;Caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#cli"&gt;CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#code-analysis"&gt;Code Analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#code-coverage"&gt;Code Coverage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#code-generators"&gt;Code Generators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#compiler-compiler"&gt;Compiler-compiler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#computer-vision"&gt;Computer Vision&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#configuration"&gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#constraint-satisfaction-problem-solver"&gt;Constraint Satisfaction Problem Solver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#csv"&gt;CSV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#data-structures"&gt;Data Structures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#database"&gt;Database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#date-and-time"&gt;Date and Time&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#dependency-injection"&gt;Dependency Injection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#development"&gt;Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#distributed-applications"&gt;Distributed Applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#distributed-transactions"&gt;Distributed Transactions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#distribution"&gt;Distribution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#document-processing"&gt;Document Processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#financial"&gt;Financial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#formal-verification"&gt;Formal Verification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#functional-programming"&gt;Functional Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#game-development"&gt;Game Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#geospatial"&gt;Geospatial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#gui"&gt;GUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#high-performance"&gt;High Performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#http-clients"&gt;HTTP Clients&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#hypermedia-types"&gt;Hypermedia Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ide"&gt;IDE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#imagery"&gt;Imagery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#introspection"&gt;Introspection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#job-scheduling"&gt;Job Scheduling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#json"&gt;JSON&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#jvm-and-jdk"&gt;JVM and JDK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#logging"&gt;Logging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#machine-learning"&gt;Machine Learning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#messaging"&gt;Messaging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#microservice"&gt;Microservice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#miscellaneous"&gt;Miscellaneous&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mobile-development"&gt;Mobile Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#monitoring"&gt;Monitoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#native"&gt;Native&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#natural-language-processing"&gt;Natural Language Processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#networking"&gt;Networking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#orm"&gt;ORM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#paas"&gt;PaaS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#pdf"&gt;PDF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#performance-analysis"&gt;Performance analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#platform"&gt;Platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#processes"&gt;Processes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#reactive-libraries"&gt;Reactive libraries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#rest-frameworks"&gt;REST Frameworks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#science"&gt;Science&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#search"&gt;Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#security"&gt;Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#serialization"&gt;Serialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#server"&gt;Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#template-engine"&gt;Template Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#testing"&gt;Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#utility"&gt;Utility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#version-managers"&gt;Version Managers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web-crawling"&gt;Web Crawling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web-frameworks"&gt;Web Frameworks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#workflow-orchestration-engines"&gt;Workflow Orchestration Engines&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#resources"&gt;Resources&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#related-awesome-lists"&gt;Related Awesome Lists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#communities"&gt;Communities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#frontends"&gt;Frontends&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#influential-books"&gt;Influential Books&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#podcasts-and-screencasts"&gt;Podcasts and Screencasts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#people"&gt;People&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#websites"&gt;Websites&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#contributing"&gt;Contributing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="projects"&gt;Projects&lt;/h2&gt;
&lt;h3 id="architecture"&gt;Architecture&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Frameworks and libraries that help implementing and verifying design and architecture concepts.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Project Loom虚拟介绍</title><link>https://plumephp.com/project-loom/</link><pubDate>Wed, 23 Oct 2024 14:24:14 +0800</pubDate><guid>https://plumephp.com/project-loom/</guid><description>&lt;p&gt;&lt;code&gt;Project Loom&lt;/code&gt; 是一个由 &lt;code&gt;OpenJDK&lt;/code&gt; 社区发起的项目，旨在为 &lt;code&gt;Java&lt;/code&gt; 引入轻量级线程（称为 Virtual Threads 或 Loom Threads），以支持高吞吐量的并发模型。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Project Loom&lt;/code&gt; 的目标是减少编写、维护和观察高吞吐量并发应用程序的努力，同时充分利用可用的硬件资源。它通过引入虚拟线程来实现这一点，虚拟线程在代码中、运行时、调试器和分析器中都被视为 &lt;code&gt;Thread&lt;/code&gt;。虚拟线程不是 OS 线程的包装器，而是 &lt;code&gt;Java&lt;/code&gt; 实体。创建虚拟线程的成本很低，可以拥有数以百万计的虚拟线程，而不需要对它们进行池化管理。&lt;/p&gt;</description></item><item><title>Akka Actor编程</title><link>https://plumephp.com/akka-actor-bian-cheng/</link><pubDate>Tue, 15 Oct 2024 20:36:54 +0800</pubDate><guid>https://plumephp.com/akka-actor-bian-cheng/</guid><description>&lt;p&gt;Akka actor 模型是一种强大的并发编程范式，它通过消息传递来实现 &lt;strong&gt;actor&lt;/strong&gt; 之间的通信，避免了传统并发编程中的锁和共享状态的问题。&lt;/p&gt;
&lt;p&gt;以下是 Akka actor 编程的一个基本教程。&lt;/p&gt;
&lt;h3 id="1-基础概念"&gt;1. 基础概念&lt;/h3&gt;
&lt;p&gt;在 Akka 中，一切都是 &lt;strong&gt;actor&lt;/strong&gt;。&lt;strong&gt;actor&lt;/strong&gt; 是 Akka 并发模型的基本构建块，它封装了状态和行为，并通过消息传递与外界通信。每个 &lt;strong&gt;actor&lt;/strong&gt; 都有一个邮箱（mailbox），用于接收消息，以及一个行为（behavior），定义了如何处理这些消息。&lt;/p&gt;</description></item><item><title>Java生态资源大全</title><link>https://plumephp.com/java-sheng-da-quan/</link><pubDate>Sat, 12 Oct 2024 11:37:24 +0800</pubDate><guid>https://plumephp.com/java-sheng-da-quan/</guid><description>&lt;h1 id="java生态资源大全"&gt;&lt;a href="https://github.com/tuyucheng777/awesome-java"&gt;Java生态资源大全&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;这里汇总了Java生态圈中的各种框架、库、中间件，包括Web开发、大数据、桌面开发、机器学习、软件测试、物联网、Android等领域。&lt;/p&gt;
&lt;p&gt;所有框架和库都是基于Java语言实现的，只有极少数是由Kotlin、Scala、Groovy等JVM系语言混合开发，并且也可以在Java中兼容使用。&lt;/p&gt;</description></item><item><title>spring boot3进阶</title><link>https://plumephp.com/spring-boot3/</link><pubDate>Thu, 05 Sep 2024 20:34:10 +0800</pubDate><guid>https://plumephp.com/spring-boot3/</guid><description>&lt;p&gt;Spring Boot 3 作为一个重大更新，带来了许多新特性和改进，使得开发者能够更加高效地构建现代化的 Java 应用程序。以下是一些 Spring Boot 3 的进阶教程内容，包括代码示例和详细解释，以及当前的最佳实践。&lt;/p&gt;</description></item><item><title>Spring Boot3入门例子</title><link>https://plumephp.com/spring-boot3-ru-men/</link><pubDate>Wed, 04 Sep 2024 19:59:01 +0800</pubDate><guid>https://plumephp.com/spring-boot3-ru-men/</guid><description>&lt;p&gt;Spring Boot 3 是一个基于 Spring 框架的快速开发工具，它通过自动配置和约定优于配置的原则，简化了 Spring 应用的创建和部署。在 Spring Boot 3 中，许多新特性和改进被引入，以提高开发效率和应用性能。以下是对 Spring Boot 3 的一些核心概念和常用注解的详细说明，以及相应的代码示例。&lt;/p&gt;</description></item><item><title>Awesome JavaFX</title><link>https://plumephp.com/awesome-javafx/</link><pubDate>Tue, 03 Sep 2024 17:58:13 +0800</pubDate><guid>https://plumephp.com/awesome-javafx/</guid><description>&lt;h1 id="awesome-javafx-awesome"&gt;Awesome JavaFX &lt;a href="https://github.com/sindresorhus/awesome"&gt;&lt;img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" loading="lazy" decoding="async" style="max-width: 100%; height: auto;"&gt;
&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A curated list of awesome JavaFX frameworks, libraries, books etc&amp;hellip; .&lt;/p&gt;
&lt;p&gt;From: &lt;a href="https://github.com/mhrimaz/AwesomeJavaFX"&gt;https://github.com/mhrimaz/AwesomeJavaFX&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="contents"&gt;Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#libraries-tools-and-projects"&gt;Libraries, Tools and Projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#frameworks"&gt;Frameworks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#books"&gt;Books&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#blogs-and-sites"&gt;Blogs and Sites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#people"&gt;People&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#tutorials"&gt;Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#talks"&gt;Talks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#slides"&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#articles"&gt;Articles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#real-world-examples"&gt;Real World Examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="libraries-tools-and-projects"&gt;Libraries, Tools and Projects&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/actlist/actlist"&gt;Actlist&lt;/a&gt; - Actlist is a utility platform to execute your own action list easily and simply.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lestard/advanced-bindings"&gt;Advanced-Bindings for JavaFX (8)&lt;/a&gt; - advanced-bindings is a collection of useful helpers and custom binding implementations like java.lang.Math or Switch-Case as JavaFX binding.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/alexbodogit/AnchorFX"&gt;AnchorFX&lt;/a&gt; - Docking framework for JavaFX platform.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/iAmGio/animated"&gt;Animated&lt;/a&gt; - Implicit animations for JavaFX, inspired by Flutter.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Typhon0/AnimateFX"&gt;AnimateFX&lt;/a&gt; - A JavaFX library containing ready-to-use animations.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lestard/assertj-javafx"&gt;assertj-javafx&lt;/a&gt; - AssertJ assertions for JavaFX Properties and Bindings.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aalmiray/bootstrapfx/"&gt;BootstrapFX&lt;/a&gt; - BootstrapFX is a partial port of Twitter Bootstrap for JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dlemmermann/CalendarFX"&gt;CalendarFX&lt;/a&gt; - CalendarFX is a calendar framework for JavaFX 8. It contains a set of professional custom controls, which can be used to implement a calendar UI for any kind of application.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/GSI-CS-CO/chart-fx"&gt;ChartFx&lt;/a&gt; - ChartFx is a scientific charting library developed at &lt;a href="https://www.gsi.de/en"&gt;GSI&lt;/a&gt; for [FAIR] (&lt;a href="https://www.gsi.de/en/researchaccelerators/fair.htm"&gt;https://www.gsi.de/en/researchaccelerators/fair.htm&lt;/a&gt;) with focus on performance optimised real-time data visualisation for data sets with up to millions of data point.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/McFoggy/cssfx"&gt;CssFX&lt;/a&gt; - Enhances developer productivity by providing JavaFX CSS reloading functionnality in a running application. Usable as standalone library or integrated in &lt;a href="#ScenicView"&gt;Scenic View&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TangoraBox/ComponentInspector"&gt;Component-Inspector&lt;/a&gt; - A tool to help you inspect the location and properties of certain components in a window hierarchy.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://controlsfx.github.io/"&gt;ControlsFX&lt;/a&gt; - ControlsFX is an open source project for JavaFX that aims to provide really high quality UI controls and other tools to complement the core JavaFX distribution.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Oshan96/CustomStage"&gt;CustomStage&lt;/a&gt; - CustomStage is a fully customizable Undecorated JavaFX stage (window) with amazing features.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aalmiray/desktoppanefx"&gt;DesktopPaneFX&lt;/a&gt; - MDI components for JavaFX. Think JDesktopPane/JInternalFrame for JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.efxclipse.org/"&gt;e(fx)clipse&lt;/a&gt; - JavaFX Tooling and Runtime for Eclipse and OSGi.&lt;/li&gt;
&lt;li&gt;[Figures] (&lt;a href="https://github.com/pjacobsma/Figures.git"&gt;https://github.com/pjacobsma/Figures.git&lt;/a&gt;) - Figures is a free, simple-to-use, flexible money management application. It is light-weight and fast, and stores your data in a SQLite database, which can be optionally encrypted. You can import and export your data in OFX or QIF formats.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/malikoski/FlexBoxFX"&gt;FlexBoxFX&lt;/a&gt; - FlexBoxFX is a JavaFX implementation of CSS3 flexbox layout manager.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dlsc.com/products/flexganttfx/"&gt;FlexGanttFX&lt;/a&gt; - FlexGanttFX is the most advanced JavaFX-based Gantt charting framework currently available for Java.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TomasMikula/Flowless"&gt;Flowless&lt;/a&gt; - Efficient VirtualFlow for JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bitbucket.org/Jerady/fontawesomefx"&gt;FontAwesomeFX&lt;/a&gt; - FontAwesome in JavaFX with FontAwesomeFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dlemmermann/FormsFX"&gt;FormsFX&lt;/a&gt; - A framework for easily creating forms for a JavaFX UI.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/iAmGio/froxty"&gt;FroXty&lt;/a&gt; - iOS frosty/translucent effect to JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/goxr3plus/FX-BorderlessScene"&gt;FX-BorderlessScene&lt;/a&gt; - Undecorated JavaFX Scene with implemented move, resize, minimise, maximise, close and Windows Aero Snap controls.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://oliver-loeffler.github.io/FXFileChooser/"&gt;FXFileChooser&lt;/a&gt; - provides an alternative file chooser especially suitable for extreme large directories where an integrated live search and filtering can be helpful.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dooApp/FXForm2"&gt;FXForm2&lt;/a&gt; - A library providing automatic JavaFX form generation. The generated form is highly configurable and skinnable using code, annotations and CSS styling. FXForm2 is compatible with the JSR 303 for bean validation.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jfree/fxgraphics2d"&gt;FXGraphics2D&lt;/a&gt; - A library that provides a Graphics2D API for drawing on the JavaFX Canvas so that existing Java2D code can be reused easily. This library was created to provide JavaFX support for JFreeChart.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/edvin/fxlauncher"&gt;FXLauncher&lt;/a&gt; - Auto updating launcher for JavaFX Applications. Combined with JavaFX native packaging, you get a native installer with automatic app updates.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dukke/FXParallax"&gt;FXParallax&lt;/a&gt; - Parallax framework for Java (JavaFX).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dukke/FXRibbon"&gt;FXRibbon&lt;/a&gt; - Microsoft like Ribbon control for Java (JavaFX).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Dansoftowner/FXTaskbarProgressBar"&gt;FXTaskbarProgressBar&lt;/a&gt; - A library for showing progress on the Windows taskbar.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dustinkredmond/FXTrayIcon"&gt;FXTrayIcon&lt;/a&gt; - System TrayIcon implementation for JavaFX that allows developers to use native JavaFX MenuItems and not have to worry with AWT or Swing.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dukke/FXValidation"&gt;FXValidation&lt;/a&gt; - Validation support for Java (JavaFX).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Birdasaur/FXyz"&gt;FXyz&lt;/a&gt; - F(X)yz is a new JavaFX 3D library that provides additional primitives, composite objects, controls and data visualizations that the base JavaFX 8 3D packages do not have.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dlsc-software-consulting-gmbh/GemsFX"&gt;GemsFX&lt;/a&gt; - A small library with useful controls: an on-screen keyboard, a PDF viewer control, and some more.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tom91136/GestureFX"&gt;GestureFX&lt;/a&gt; - A lightweight pinch-to-zoom pane for JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/threerings/getdown"&gt;Getdown&lt;/a&gt; - Getdown is a system for deploying Java applications to end-user computers, as well as keeping those applications up to date.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gluonhq.com/labs/maps/"&gt;Gluon Maps&lt;/a&gt; - Gluon Maps is built with high performance in mind, but that doesn’t mean functionality is missing. Gluon Maps offers layer overlays, multiple tilesets, and much more.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gluonhq.com/labs/scene-builder/"&gt;Gluon Scene Builder&lt;/a&gt; - Scene Builder works with the JavaFX ecosystem – official controls, community projects, and Gluon offerings including Gluon Mobile, Gluon Desktop, and Gluon CloudLink.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rterp.github.io/GMapsFX/"&gt;GMapFX&lt;/a&gt; - GMapsFX provides a wrapper to the Google Map&amp;rsquo;s Javascript API, allowing you to use and interact with maps using a pure Java API.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eckig/graph-editor"&gt;graph editor&lt;/a&gt; - A library for creating and editing graph-like diagrams in JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lestard/Grid"&gt;Grid&lt;/a&gt; - A Component for grid based games like sudoku or chess.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kordamp/ikonli"&gt;Ikonli&lt;/a&gt; - Ikonli provides icon packs that can be used in Java applications. Currently Swing and JavaFX UI toolkits are supported.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jannikbuscha/javafx-dashboard"&gt;JavaFX Dashboard&lt;/a&gt; - Customizable JavaFX Dashboard with theme changer, dark/light modes, and table builder for a user-friendly interface.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jasrodis/javafx-dataviewer-wrapper"&gt;JavaFX DataViewer&lt;/a&gt; - JavaFX Charts library. Create Charts in JavaFX using the plotly.js library.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/stefaneidelloth/javafx-d3"&gt;javafx-d3&lt;/a&gt; - javafx-d3 provides a Java API for using the JavaScript library d3.js with JavaFx Applications.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gluonhq.com/labs/javafxports/"&gt;JavaFXPorts&lt;/a&gt; - JavaFXPorts is the open source project that brings Java and JavaFX to mobile and embedded hardware, including iPhone, iPad, Android devices, and the Raspberry Pi.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/miho/JCSG"&gt;JCSG&lt;/a&gt; - Java implementation of BSP based CSG (Constructive Solid Geometry).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jfoenix.com/"&gt;JFoenix&lt;/a&gt; - JavaFX Material Design Library. JFoenix is an open source Java library, that implements Google Material Design using Java components.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/schlegel11/JFXAnimation"&gt;JFXAnimation&lt;/a&gt; - Builder for CSS keyframe animations in JavaFX. Create animations like you would do with CSS.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/CaptainParanoid/JFXNodeMapper"&gt;JFXNodeMapper&lt;/a&gt; - Javafx Node mapping to various data formats like csv,xml,json and resultset.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/miho/JFXScad"&gt;JFXScad&lt;/a&gt; - JavaFX 3D Printing IDE based on JCSG.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jfxtras.org/"&gt;JFXtras&lt;/a&gt; - A supporting library for JavaFX, containing helper classes, extended layouts, controls and other interesting widgets.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jidesoft/jidefx-oss"&gt;JideFX&lt;/a&gt;- JideFX Common Layer is a collection of various extensions and utilities for to JavaFX platform. The JideFX Common Layer is the equivalent to the JIDE Common Layer in the JIDE components for Swing.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pixelduke.com/jmetro"&gt;JMetro&lt;/a&gt; - Modern theme (or look and feel) for JavaFX inspired by Microsoft Metro / Fluent Design System. It is used for instance in NASA&amp;rsquo;s app: &lt;a href="https://www.youtube.com/watch?v=MotQ1PC1xT8"&gt;Deep Space Trajectory Explorer&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jpro.one/"&gt;jpro&lt;/a&gt; - JavaFX for the Browser. jpro is a new technology which brings Java back into the browser - without Java Plugin.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aalmiray/jsilhouette"&gt;JSilhouette&lt;/a&gt; - JSilhouette provides additional shapes for Java applications.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hudsonb/kubed"&gt;Kubed&lt;/a&gt; - A port of the popular Javascript library D3.js to Kotlin/JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Naoghuman/lib-tile"&gt;Lib-Tile&lt;/a&gt; - Lib-Tile is a multi Maven project written in JavaFX and NetBeans IDE 8.0.2 and provides the functionalities to use and handle easily Tiles in your JavaFX application.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TomasMikula/LiveDirsFX"&gt;LiveDirsFX&lt;/a&gt; - Directory tree model for JavaFX that watches the filesystem for changes.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/palexdev/MaterialFX"&gt;MaterialFX&lt;/a&gt; - A new well documented and actively developed library which brings material design components to JavaFX and much more.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wiverson/maven-jpackage-template"&gt;Maven jpackage Template&lt;/a&gt; - GitHub template. Use Maven, jlink and jpackage to produce JavaFX macOS, Windows and Linux installers via GitHub Actions.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/HanSolo/Medusa"&gt;Medusa&lt;/a&gt; - A JavaFX library for Gauges. The main focus of this project is to provide Gauges that can be configured in multiple ways.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://miglayout.com"&gt;MigPane&lt;/a&gt; - MigLayout can produce flowing, grid based, absolute (with links), grouped and docking layouts.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Naoghuman/NetBeansIDE-AfterburnerFX-Plugin"&gt;NetBeansIDE-AfterburnerFX-Plugin&lt;/a&gt; - The NetBeansIDE-AfterburnerFX-Plugin is a NetBeans IDE plugin which supports the file generation in convention with the library afterburner.fx in a JavaFX project.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jfree/orson-charts"&gt;Orson Charts&lt;/a&gt; - An interactive 3D chart library for JavaFX and Swing.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/pi-rail/pi-rail-fx"&gt;PI-Rail-FX&lt;/a&gt; - A UI for a model railway control system.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dlemmermann/PreferencesFX"&gt;PreferencesFX&lt;/a&gt; - A library to easily create a UI for application settings / preferences.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/quarkiverse/quarkus-fx"&gt;Quarkus-fx&lt;/a&gt; - An extension to run JavaFX in a Quarkus application.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/qupath/qupath"&gt;QuPath&lt;/a&gt; - Open source software for bioimage analysis.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/shadskii/ReactorFX"&gt;ReactorFX&lt;/a&gt; - ReactorFX integrates Project Reactor and JavaFX by providing a simple API to create reactive Flux from JavaFX Controls, Dialogs, Observables, and Collections.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TomasMikula/ReactFX"&gt;ReactFX&lt;/a&gt; - Reactive event streams, observable values and more for JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lestard/redux-javafx-devtool"&gt;redux-javafx-devtool&lt;/a&gt; - A developer-tool for ReduxFX. Visualizes the state and actions of the app. Enables time-traveling.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Hakky54/resize-me"&gt;Resize Me&lt;/a&gt; - An app to resize and compress images.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gluonhq/rich-text-area"&gt;RichTextArea&lt;/a&gt; - Rich text area with support for emojis, images, tables, hyperlinks and much more.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TomasMikula/RichTextFX"&gt;RichTextFX&lt;/a&gt; - Rich-text area for JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ReactiveX/RxJavaFX"&gt;RxJavaFX: JavaFX bindings for RxJava&lt;/a&gt; - RxJavaFX is a simple API to convert JavaFX events into RxJava Observables and vice versa. It also has a scheduler to safely move emissions to the JavaFX Event Dispatch Thread.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fxexperience.com/scenic-view/"&gt;Scenic View&lt;/a&gt; - Scenic View is a JavaFX application designed to make it simple to understand the current state of your application scenegraph, and to also easily manipulate properties of the scenegraph without having to keep editing your code. This lets you find bugs, and get things pixel perfect without having to do the compile-check-compile dance.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/frosch95/SmartCSV.fx"&gt;SmartCSVFX&lt;/a&gt; - A simple JavaFX application to load, save and edit a CSV file and provide a JSON configuration for columns to check the values in the columns.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/stream-pi"&gt;Stream-Pi&lt;/a&gt; - A modular, free, Open Source, Cross-platform macro pad software.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lestard/SynchronizeFX"&gt;SynchronizeFX&lt;/a&gt; - Remote Data-Binding between different JVMs, both on a local machine and over the network.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jyloo.com/syntheticafx/"&gt;SyntheticaFX&lt;/a&gt; - SyntheticaFX provides themes and components mainly made for professional business applications on the desktop. The library is growing, new controls are under construction and will be added in future releases. The target platform of the final release is Java 9 or above.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TestFX/TestFX"&gt;TestFX&lt;/a&gt; - Simple and clean testing for JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aalmiray/testfx-dsl/"&gt;TestFX-dsl&lt;/a&gt; - Java friendly DSL for defining TestFX tests.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/HanSolo/tilesfx"&gt;TilesFX&lt;/a&gt; - A JavaFX library containing tiles for Dashboards.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bitbucket.org/panemu/tiwulfx"&gt;TiwulFX&lt;/a&gt; provides UI components: advanced TableView with various ready to use columns (TextColumn, NumberColumn, LookupColumn etc), DetachableTabPane that can be used as docking framework, MessageDialog, SideMenu etc.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tuiofx.org/"&gt;TuioFX&lt;/a&gt; - Toolkit for developing multi-touch, multi-user interactive tabletops and surfaces.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pixelduke.com/projects#toggle-switch"&gt;Toggle Switch&lt;/a&gt; - Toggle Switch control for Java (JavaFX).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/in-sideFX/Undecorator"&gt;Undecorator&lt;/a&gt; - Decorate undecorated JavaFX stages with custom skin. This helper brings a custom look to your JavaFX stages.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TomasMikula/UndoFX"&gt;UndoFX&lt;/a&gt; - Undo manager for JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/update4j/update4j"&gt;Update4j&lt;/a&gt; - Auto-updater and launcher for your distributed applications. Built with Java 9&amp;rsquo;s module system in mind.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/effad/ValidatorFX"&gt;ValidatorFX&lt;/a&gt; - A validation library for JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/miho/VWorkflows"&gt;VWorkflows&lt;/a&gt; - Interactive flow/graph visualization for building domain specific visual programming environments. Provides UI bindings for JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webfx.dev"&gt;WebFX&lt;/a&gt; - A JavaFX application transpiler. Write your Web Application in JavaFX and WebFX will transpile it in pure JS.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vsch/Javafx-WebView-Debugger"&gt;Webview Debugger&lt;/a&gt; - JavaFx WebView debugging with Chrome Dev tools.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Hakky54/welk-lidwoord"&gt;Welk Lidwoord&lt;/a&gt; - An app that will help you to improve your Dutch grammar.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TomasMikula/WellBehavedFX"&gt;WellBehavedFX&lt;/a&gt; - Composable event handlers and skin scaffolding for JavaFX controls.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gravetii/wordagam"&gt;Wordagam&lt;/a&gt; - A fun little word game built with openjfx.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="frameworks"&gt;Frameworks&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://afterburner.adam-bien.com/"&gt;afterburner.fx&lt;/a&gt; - afterburner.fx is a minimalistic (3 classes) JavaFX MVP framework based on Convention over Configuration and Dependency Injection.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/othreecodes/APX"&gt;APX&lt;/a&gt; - A JavaFX Library for Creating and Implementing MVC Type applications.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/basilisk-fw/basilisk"&gt;Basilisk&lt;/a&gt; - Desktop/Mobile JavaFX application framework. &lt;a href="https://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License V2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cljfx/cljfx"&gt;cljfx&lt;/a&gt; - Lightweight JavaFX Framework for Clojure&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/guigarage/DataFX"&gt;DataFX&lt;/a&gt; - DataFX is a JavaFX frameworks that provides additional features to create MVC based applications in JavaFX by providing routing and a context for CDI.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/canoo/dolphin-platform"&gt;Dolphin Platform&lt;/a&gt; - Dolphin Platform is a client / server frameworks that provides a async communication between a server and a client based on the remote presentation model pattern.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TomasMikula/EasyBind"&gt;EasyBind&lt;/a&gt; - EasyBind leverages lambdas to reduce boilerplate when creating custom bindings.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tristan971/EasyFXML"&gt;EasyFXML&lt;/a&gt; - EasyFXML is a fully-featured opinionated JavaFX framework based&lt;br&gt;
on Vavr and Spring Boot which manages most of the annoying boilerplate that comes with JavaFX. &lt;a href="https://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License V2&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://almasb.github.io/FXGL/"&gt;FXGL&lt;/a&gt; - JavaFX Game Development Framework.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://griffon-framework.org/"&gt;Griffon&lt;/a&gt; - Next generation desktop application development platform for the JVM. &lt;a href="https://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License V2&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jacpfx.org/"&gt;JacpFX&lt;/a&gt; - An UI application framework based on JavaFX.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jrebirth.org/"&gt;JRebirth&lt;/a&gt; - JRebirth JavaFX Application Framework provides a really simple way to write sophisticated and powerful RIA and Desktop applications.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sialcasa/mvvmFX"&gt;mvvmFX&lt;/a&gt; - mvvm(fx) is an application framework which provides you necessary components to implement the MVVM pattern with JavaFX. &lt;a href="https://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License V2&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openlowcode/Open-Lowcode"&gt;Open Lowcode&lt;/a&gt; - A low-code framework for enterprise software with a JavaFX thin client.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/roskenet/springboot-javafx-support"&gt;SpringBoot-JavaFX-Support&lt;/a&gt; - Dependency Injection Support for JavaFX with Spring.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TangoraBox/ReactiveDeskFX"&gt;ReactiveDeskFX&lt;/a&gt; - JavaFX micro-framework to develop JavaFX components very fast with minimal code following MVVM architecture pattern with passive view.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/netopyr/reduxfx"&gt;ReduxFX&lt;/a&gt; - Functional Reactive Programming (FRP) for JavaFX inspired by the JavaScript library Redux.js.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.scalafx.org/"&gt;ScalaFX&lt;/a&gt; - simplifies creation of JavaFX-based user interfaces in Scala.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/edvin/tornadofx"&gt;TornadoFX&lt;/a&gt; - Lightweight JavaFX Framework for Kotlin.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dlemmermann/WorkbenchFX"&gt;WorkbenchFX&lt;/a&gt; - A lightweight RCP framework for JavaFX applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="books"&gt;Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://leanpub.com/gettingstartedwithjavaontheraspberrypi/"&gt;Getting started with Java on the Raspberry Pi&lt;/a&gt; - By &lt;a href="https://twitter.com/FrankDelporte"&gt;Frank Delporte&lt;/a&gt;&lt;br/&gt;&lt;br&gt;
Get started with the latest versions of Java, JavaFX, Pi4J, Spring and so much more. Learn the power (and fun!) of experimenting with electronics. All explained in many small and easy to understand examples.&lt;/p&gt;</description></item><item><title>Spring Boot常用注解说明</title><link>https://plumephp.com/spring-boot-chang-jie-shuo-ming/</link><pubDate>Tue, 03 Sep 2024 10:27:27 +0800</pubDate><guid>https://plumephp.com/spring-boot-chang-jie-shuo-ming/</guid><description>&lt;p&gt;Spring Boot 是一个基于 Spring 框架的项目，它通过简化配置来帮助开发者快速构建微服务和其他应用程序。在 Spring Boot 中，注解（Annotations）扮演着非常重要的角色，它们用于减少配置和提高代码的可读性。以下是一些常用的 Spring Boot 注解及其详解：&lt;/p&gt;</description></item><item><title>Java17中的文本块特性在实际开发中有哪些具体的应用场景</title><link>https://plumephp.com/java17-zhong-de-xing-zai-shi-kai-fa-zhong-you-ju-de-ying/</link><pubDate>Wed, 14 Aug 2024 19:48:16 +0800</pubDate><guid>https://plumephp.com/java17-zhong-de-xing-zai-shi-kai-fa-zhong-you-ju-de-ying/</guid><description>&lt;p&gt;Java 17 中的文本块特性在实际开发中有多种应用场景，特别是涉及到处理大量或多行文本数据时。以下是一些具体的应用实例：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多行字符串常量&lt;/strong&gt;：在配置文件、日志记录、错误消息或任何需要多行文本输出的场景中，文本块提供了一种更清晰、更简洁的表示方法。&lt;/p&gt;</description></item><item><title>Springboot3介绍</title><link>https://plumephp.com/springboot3/</link><pubDate>Wed, 14 Aug 2024 19:44:24 +0800</pubDate><guid>https://plumephp.com/springboot3/</guid><description>&lt;p&gt;Spring Boot 3 带来了一系列新特性和改进，主要包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Java 17 支持&lt;/strong&gt;：Spring Boot 3 将 Java 17 作为最低支持的版本，利用了其新特性，如记录（Record）类型、文本块、模式匹配的 switch 表达式和密封类等 。&lt;/p&gt;</description></item><item><title>Java快速入门教程</title><link>https://plumephp.com/java-kuai-ru-men-cheng/</link><pubDate>Tue, 23 Jul 2024 20:12:38 +0800</pubDate><guid>https://plumephp.com/java-kuai-ru-men-cheng/</guid><description>&lt;p&gt;Java 是一种广泛使用的编程语言，以其跨平台特性、面向对象的特性和健壮性而闻名。以下是一些快速入门Java的步骤和资源：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;了解Java基础&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Java是一种静态类型、面向对象的编程语言。&lt;/li&gt;
&lt;li&gt;它由Sun Microsystems（现为Oracle Corporation）开发。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设置开发环境&lt;/strong&gt;：&lt;/p&gt;</description></item></channel></rss>