news 2026/10/15 11:40:23

FIT Java 框架快速开始:从零构建你的第一个 Web 应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FIT Java 框架快速开始:从零构建你的第一个 Web 应用
  • 人工智能
  • 大模型
  • AI 应用
  • 后端
  • AI Agent
  • RAG
  • 流程编排
  • 微服务

【免费下载链接】fit-framework

FIT: 企业级AI开发框架,提供多语言函数引擎(FIT)、流式编排引擎(WaterFlow)及Java生态的LangChain替代方案(FEL)。原生/Spring双模运行,支持插件热插拔与智能聚散部署,无缝统一大模型与业务系统。

项目地址:https://gitcode.com/ModelEngine/fit-framework
点击查看免费下载

本指南以 FIT 函数平台的 Java 实现为核心,带你完成环境准备、框架编译、注册中心启动、依赖引入、启动类与控制器编写,直至通过 IDEA 或可执行 JAR 将应用跑起来,并以一次真实的 HTTP 请求验证结果。读完本文,你将掌握 FIT Java 应用的最小可用闭环,并理解其背后"多语言融合编程、插件化开发、聚散部署、共享内存"四大特性的设计与实现脉络,为后续阅读插件化、热插拔、服务调用等进阶指南打好基础。

FIT 函数平台是什么

FIT(FIT 函数平台)是一套支持多语言融合编程、插件化开发、聚散部署和共享内存的解决方案,旨在提供一种灵活的服务开发范式。其四大核心能力如下:

  • 多语言融合编程:FIT 在多种编程语言中采用统一的接口描述标准,分别进行实现,并进行相互调用,以达到多语言互相融合协作的目的。
  • 插件化开发:FIT 为多种编程语言分别提供了插件开发标准,允许插件在不依赖其他插件的前提下调用其他插件所提供的服务。
  • 聚散部署:FIT 为多种编程语言分别提供了运行时环境,允许插件在其运行时环境中既可以单个插件独立进程运行,也可以多个插件共享进程运行。
  • 共享内存:FIT 支持插件之间共享内存,即使多个插件分散为多个进程部署,也可以以内存访问的效率来访问共享数据。

在 FIT 的编程模型中,有两个用户可感知的最小单元:Genericable(泛服务定义,可类比 Java 中的接口方法)与Fitable(泛服务实现,可类比接口方法的实现类)。一个Genericable可对应多个Fitable,而一个Fitable只归属于一个Genericable。插件则用于将这些基础单元组织为可供管理的最小单元,运行于 FIT 运行时之上;运行于不同运行时的Fitable之间通过注册中心完成服务发现与注册,从而能够互相调用。更完整的设计理念可参考 FIT 概述。

本文的快速开始流程不引入插件概念,先以一个最简单的 Web 应用跑通全链路。

快速开始

以下是在Java中编写一个完整FIT应用程序的简单说明,完整可运行代码位于示例工程 01-simple-web-app。

环境准备

开始之前,请确认以下环境就绪:

  • 编辑器,如 IntelliJ IDEA
  • Java 17
  • Maven,推荐版本 Maven 3.8.8+
  • 对 fitframework 构建:在framework/fit/java目录下使用 Maven 对框架进行编译:mvn clean install
  • 对您的项目构建:在您的项目下进行编译:mvn clean install
  • 内存版注册中心启动:参考 registry-center.md

编译完成后,框架产物会输出到仓库根目录build/下,其中包含build/bin/fit启动脚本,以及build/plugins/fit-service-coordination-simple-*.jar等内存注册中心插件。本地开发时可直接执行./build/bin/fit start启动 FIT 服务(默认启用内存注册中心),并通过curl http://localhost:8080/actuator/plugins验证服务状态;若默认端口8080冲突,可用./build/bin/fit start server.http.port=8081覆盖端口。

0. 添加依赖

在 Maven 项目系统生成的pom文件中,添加 Web 相关的依赖,如下所示:

<dependencies> <dependency> <groupId>org.fitframework</groupId> <artifactId>fit-starter</artifactId> <version>${fit.version}</version> </dependency> <dependency> <groupId>org.fitframework</groupId> <artifactId>fit-plugins-starter-web</artifactId> <version>${fit.version}</version> </dependency> <dependency> <groupId>org.fitframework</groupId> <artifactId>fit-api</artifactId> <version>${fit.version}</version> </dependency> </dependencies>

三个依赖的分工可以从仓库的模块定义中看出:

  • fit-starter是应用启动的最小依赖集合:通过 fit-starter/pom.xml 可以看到,它以运行时(runtime)作用域聚合了fit-runtime、fit-conf、fit-conf-yaml、fit-ioc、fit-plugin,并以编译作用域引入fit-api、fit-util、fit-log-console、fit-reactor等,保证 FIT 应用能够跑起来。
  • fit-plugins-starter-web使应用程序具备 Web 服务的基本能力:通过 fit-plugins-starter-web/pom.xml 可以看到,它聚合了fit-http-classic服务以及fit-http-handler-registry、fit-server-http、fit-http-server-netty(Netty HTTP 服务端)、fit-value-fastjson、fit-message-serializer-json-jackson等 Web 场景插件。
  • fit-api提供 FIT 框架对外暴露的 API,如注解、Genericable与Fitable定义、异常体系等。

此外,构建阶段需要配置fit-build-maven-plugin,并在<executions>中声明package-app目标,这是打包应用的必选指令。完整pom.xml示例可参考 01-simple-web-app/pom.xml,其中fit.version使用3.7.0-SNAPSHOT,并通过maven-compiler-plugin指定java.version=17与-parameters编译参数。

1. 创建启动器

通过FitStarter类的静态方法start去启动整个应用,使 FIT 框架对启动类进行识别,示例如下:

package modelengine.fit.demo1; import modelengine.fitframework.annotation.Component; import modelengine.fitframework.runtime.FitStarter; public class DemoApplication { public static void main(String[] args) { FitStarter.start(DemoApplication.class, args); } }

从源码看,FitStarter.java 会根据部署形态自动选择三种运行时:

  • 若当前 JAR 存在嵌套(nests)结构,则创建AggregatedFitRuntime(聚合部署,多应用共享进程);
  • 若FitStarter由系统类加载器(AppClassLoader)加载,则创建DirectFitRuntime(IDE 直接运行场景);
  • 否则创建DiscreteFitRuntime(离散部署,独立进程场景)。

启动后还会自动生成并写入系统属性worker.instance-id,作为当前进程的唯一标识。这也从侧面印证了 FIT"聚散部署"的能力设计:同一套启动代码,可以根据运行形态自动切换进程模型。

2. 创建控制器

在该应用程序中,HTTP 请求由控制器处理。我们可以创建相应的控制器和方法来进行处理,示例如下:

package modelengine.fit.demo1.controller; import modelengine.fit.http.annotation.GetMapping; import modelengine.fitframework.annotation.Component; /** * 控制器。 */ @Component public class Controller { @GetMapping(path = "/hello") public String hello() { return "hello world!"; } }

关键注解说明:

  • @Component:声明当前类为组件,纳入 FIT IoC 容器管理(对应 Spring 的@Component)。
  • @GetMapping:声明 REST 接口的 GET 请求映射,path属性确定访问路径。同样地,也可以使用@RequestMapping并指定method = HttpRequestMethod.GET达到相同效果。

如果希望接收查询参数,可以在方法参数上使用@RequestParam("name")将 HTTP 查询字符串绑定到方法参数,参见示例工程中的 UserController.java。该控制器配合资源类User(见 User.java),会通过fit-plugins-starter-web引入的序列化插件自动将返回对象封装为 JSON 格式。

3. 启动

当前应用启动有两种方式:

  • 通过 IDEA 启动:您可以直接在 IDEA 运行main方法。
  • 通过执行 JAR 文件:您可以使用 Maven 在命令行运行,构建一个包含所有必要依赖项、类和资源的单个可执行 JAR 文件,并运行该文件。

JAR 方式的具体步骤为:先执行mvn clean install编译打包(生成target目录及可执行 JAR),再执行:

java -jar target/web-service-1.0-SNAPSHOT.jar

应用启动时会有日志输出,出现如下段落即说明启动成功:

[yyyy-MM-dd hh:mm:ss.SSS] [INFO ] [main] [modelengine.fitframework.runtime.aggregated.AggregatedFitRuntime] Prepare to start FIT application... [yyyy-MM-dd hh:mm:ss.SSS] [INFO ] [main] [modelengine.fitframework.runtime.aggregated.AggregatedFitRuntime] FIT application started. [yyyy-MM-dd hh:mm:ss.SSS] [INFO ] [netty-http-server-thread-0] [modelengine.fit.http.server.netty.NettyHttpClassicServer] Start netty http server successfully. [httpPort=8080]

服务顺利启动后,通过地址http://localhost:8080/hello即可访问资源;若访问带参数的接口(如http://localhost:8080/user?name=zhangsan&age=18),会得到类似如下的 JSON 响应:

{ "name": "zhangsan", "age": 18, "id": 1 }

其中id字段唯一标识响应值,每次调用后自增 1。

发布

进入 FIT for Java 根目录(即framework/fit/java目录),执行命令:

mvn clean deploy

即可将框架各模块发布到 Maven 仓库,供其他项目以依赖方式引用。

源码视角:FIT 的核心机制

快速开始之外的框架能力,可以从各模块设计文档与源码中进一步理解,这也是后续深入学习插件化、配置、AOP、Genericable 等特性的入口。

类加载体系:插件隔离与共享

FIT 体系结构中主要使用三个ClassLoader(详见 fit-plugin/README.md 与 fit-runtime/README.md):

  • SharedClassLoader:加载公共 JAR 包,如 FIT 对外 API(fit-api)、工具集(fit-util)及所有Genericable与结构体定义,被 FIT 框架及所有插件共享;
  • FrameworkClassLoader:加载 FIT 框架实现及所使用的 JAR 包,其parent为SharedClassLoader;
  • PluginClassLoader:加载单个插件的实现及所用 JAR 包,每个插件拥有独立的PluginClassLoader实例,其parent为SharedClassLoader。

这一结构同时实现了JAR 隔离(不同插件的三方包互不影响,避免兼容性问题)与Bean 隔离(不同插件的 Bean 从各自的ClassLoader中扫描),是"插件化开发"与"聚散部署"能够落地的底层支撑。插件打包后的目录结构中,lib与third-party目录中的 JAR 加载到PluginClassLoader,shared(含shared/genericables、shared/structures)目录中的 JAR 加载到SharedClassLoader。

IoC 容器与 Bean 生命周期

BeanContainer是 FIT IoC 容器的核心接口,通过管理BeanFactory提供对Bean的管理能力(详见 fit-ioc/README.md)。容器内使用三个解析程序提供功能封装与扩展:

  • BeanResolver:封装 Bean 解析能力,判断类型或方法是否为 Bean、参数是否应进行依赖注入等,支持@FitableSuite、@Fitable、@Initialize、@Destroy、@Fit等注解;
  • DependencyResolver:解析 Bean 依赖,可按名称或类型解析,名称优先;对List/Map类型的依赖注入有特殊处理;
  • AnnotationMetadataResolver:解析注解元数据,提供"注解转发"能力(如在@FitableSuite上定义@Fitable,则标注了@FitableSuite的类也被认为标注了@Fitable)。

Bean 生命周期由BeanCreator、BeanInjector、BeanInitializer、BeanMapper、BeanDestroyer等功能接口组合而成,并可通过BeanLifecycleInterceptor以装饰器模式提供生命周期拦截能力(AOP 的重要基础)。

配置体系与优先级

FIT 的配置以"外部配置优先于内部配置"为原则(详见 fit-conf/README.md),完整优先级为:

命令行参数 > 环境变量 > 插件配置文件 > 框架配置文件 > 插件资源文件 > 框架资源文件

更具体地,Global Config 依次由命令行参数(key=value风格,--config-file=xxx与config-file=xxx等价)、系统属性(System.getProperties())、外部配置文件(路径通过config-file指定)、环境变量(System.getenv())构建,再叠加 Profile 内置配置与默认内置配置。配置自上而下分为Global Config → Plugin Config → Bean Config三层,插件配置以插件名为前缀继承全局配置。常见的配置项包括server.http.port(HTTP 暴露端口)、application.name(应用名)、fit.profiles.active(激活的 profile)等,完整列表见 常用注解和配置项。

异常体系:跨语言跨进程传递

FIT 编程框架内的异常能够跨语言跨进程传递(详见 fit-api/README.md),核心异常有 3 个:

  • FitException:最基础的异常,可携带异常码、异常信息和自定义属性集;
  • DegradableException:可降级异常,系统识别后会搜索并调用降级服务;
  • RetryableException:可重试异常,远程调用场景下会优先于降级尝试重试。

每个异常类通过@ErrorCode注解声明异常码,跨进程传递时先序列化异常码、消息与属性到 FIT 传输协议元数据中,再在接收端反序列化还原。

命令行启动脚本

除了在 IDE 或main方法中启动,FIT 还提供了基于 Node.js 的跨平台启动脚本(详见 fit-launcher/README.md):

./fit init my-app # 交互式创建项目 ./fit init my-app --group-id=com.mycompany --artifact-id=my-app --package=com.mycompany.myapp # 命令行参数创建 ./fit start [Java参数] [程序参数] # 启动应用,如 ./fit start -Xmx1g myapp config.yaml ./fit debug [Java参数] [程序参数] # Debug 模式,自动附加 jdwp 远程调试参数,端口 5005 ./fit version # 查看版本 ./fit help # 查看帮助

脚本会自动区分以-开头的 JVM 参数与程序参数,并设置plugin.fit.dynamic.plugin.directory(默认当前工作目录,动态插件加载目录)等系统属性。Windows 下对应使用fit.cmd命令。

更多内容

FIT 快速入门指南

    1. 构建基础 Web 应用
    1. 构建插件式 Web 应用
    1. 使用插件的热插拔能力
    1. 实现应用之间的服务调用
    1. 常用注解和配置项
    1. 常见问题与解决方案
    1. 工程目录最佳实践

FIT 用户指导手册

    1. 插件、IoC 容器和 Bean
    1. AOP 编程
    1. Conf 配置
    1. Web MVC 能力
    1. Genericable 面向接口的远程和本地方法调用能力
    1. 插件化开发
    1. 数据访问
    1. 日志
    1. 测试框架
    1. 流式功能
    1. FIT 框架的类加载
    1. 附加功能组件

FIT 模块设计

  • 工具集设计
  • API 设计
  • IoC 容器设计
  • 配置架构设计
  • 插件架构设计
  • 运行时设计
  • 启动程序设计
  • 人工智能
  • 大模型
  • AI 应用
  • 后端
  • AI Agent
  • RAG
  • 流程编排
  • 微服务

【免费下载链接】fit-framework

FIT: 企业级AI开发框架,提供多语言函数引擎(FIT)、流式编排引擎(WaterFlow)及Java生态的LangChain替代方案(FEL)。原生/Spring双模运行,支持插件热插拔与智能聚散部署,无缝统一大模型与业务系统。

项目地址:https://gitcode.com/ModelEngine/fit-framework
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 11:39:55

impeccable:前端CLI工具链中的隐性信任校验机制

1. 项目概述&#xff1a;一个被误读的“完美”代号&#xff0c;实则是现代前端 CLI 工具链的隐性枢纽最近在多个开源社区、CLI 工具讨论组和前端工程化 Slack 频道里&#xff0c;“impeccable”这个词频繁跳出来——它既不是 npm 包名&#xff0c;也不是 GitHub 仓库主名称&…

作者头像 李华
网站建设 2026/10/15 11:39:42

改进BPSO算法在配电网重构中的Matlab实现与应用

1. 配电网重构与智能算法应用背景 电力系统运行中&#xff0c;配电网重构是提高供电可靠性和降低网损的重要手段。传统人工调度方式在面对复杂网络结构时往往力不从心&#xff0c;这时候智能优化算法就派上了大用场。我十年前第一次接触配电网重构项目时&#xff0c;就被这个领…

作者头像 李华
网站建设 2026/10/15 11:39:41

Java SE项目开发实战:工程骨架、三层结构与SQLite打包完全指南

简介&#xff1a;面向Java程序设计学习者的综合项目开发资料包&#xff0c;适合有Java基础并希望提升实战能力的学生或开发者。包含12个典型练习案例&#xff1a;俄罗斯方块、双人俄罗斯方块、五子棋与人机对战五子棋、多媒体展示系统、野人与传教士过河、蚁群算法模拟、School…

作者头像 李华
网站建设 2026/10/15 11:39:32

Django博客系统开发:MVT架构与核心功能实现

1. 项目概述&#xff1a;DjangoBlog的核心定位DjangoBlog是一个基于Django框架开发的博客系统&#xff0c;它完美体现了Django的MVT&#xff08;Model-View-Template&#xff09;架构思想。作为一个全栈开发者的练手项目&#xff0c;它涵盖了用户认证、文章管理、评论系统等博客…

作者头像 李华
网站建设 2026/10/15 11:39:29

WordPress主题GraceTheme深度解析与优化指南

1. 主题定位与核心特色解析 GraceTheme是一款面向高端内容创作者和企业官网设计的WordPress主题。我在实际建站项目中多次使用这款主题&#xff0c;发现它特别适合需要展现专业形象但又不想过度设计的用户群体。主题采用响应式布局&#xff0c;默认适配从手机到4K显示器的各种屏…

作者头像 李华