# JavaFX 示例说明 这是一个完整的 JavaFX 应用示例,展示如何在 JavaFX 中使用 Timi-Inject IOC/DI 框架。 ## 项目结构 ``` src/test/java/com/imyeyu/inject/javafxdemo/ ├── FxMain.java # JavaFX 应用入口 ├── FxConfig.java # 配置类 (@Configuration) ├── MainController.java # 主界面控制器 (@Controller) ├── UserService.java # 用户服务 (@Service) └── MessageService.java # 消息服务 (@Service) src/test/resources/javafxdemo/ └── main.fxml # 主界面 FXML 文件 ``` ## 核心特性展示 ### 1. IOC 容器初始化 ```java @TimiInjectApplication("com.imyeyu.inject.javafxdemo") @Import(FxConfig.class) public class FxMain extends Application { private static TimiInject inject; public static void main(String[] args) { // 启动 IOC 容器 inject = TimiInject.run(FxMain.class); // 启动 JavaFX 应用 launch(args); } } ``` ### 2. 控制器工厂集成 ```java @Override public void start(Stage primaryStage) throws Exception { FXMLLoader loader = new FXMLLoader(getClass().getResource("/javafxdemo/main.fxml")); // 使用 IOC 容器作为控制器工厂 loader.setControllerFactory(type -> inject.di(type)); Parent root = loader.load(); // ... } ``` ### 3. 构造器依赖注入 ```java @Controller public class MainController { private final UserService userService; private final MessageService messageService; // 构造器注入 public MainController(UserService userService, MessageService messageService) { this.userService = userService; this.messageService = messageService; } } ``` ### 4. @Bean 工厂方法 ```java @Configuration public class FxConfig { @Bean public DateTimeFormatter dateTimeFormatter() { return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); } @Bean("appTitle") public String appTitle() { return "Timi-Inject JavaFX Demo"; } } ``` ### 5. @Qualifier 限定注入 ```java @Service public class MessageService { private final String appTitle; private final String version; public MessageService(@Qualifier("appTitle") String appTitle, @Qualifier("version") String version) { this.appTitle = appTitle; this.version = version; } } ``` ### 6. @PostConstruct 生命周期 ```java @Service public class UserService { @PostConstruct public void init() { users.add("Admin"); users.add("User1"); users.add("User2"); System.out.println("UserService initialized"); } } ``` ## 运行方式 ### 方式一:使用 Maven 插件(推荐) ```bash mvn clean javafx:run ``` ### 方式二:命令行运行 ```bash # 编译 mvn clean compile test-compile # 运行(需要正确配置 JavaFX 模块路径) java --module-path %PATH_TO_JAVAFX% \ --add-modules javafx.controls,javafx.fxml \ -cp target/classes;target/test-classes;... \ com.imyeyu.inject.javafxdemo.FxMain ``` ## 应用功能 1. **用户管理** - 添加用户 - 删除选中用户 - 显示用户列表 2. **实时日志** - 操作日志记录 - 时间戳显示 - 清空日志功能 3. **依赖注入演示** - 控制器通过构造器注入服务 - 服务之间相互依赖 - @Bean 方法提供配置对象 - @Qualifier 精确匹配依赖 ## 技术亮点 1. **零配置** - 使用注解驱动,无需 XML 2. **类型安全** - 编译时类型检查 3. **生命周期管理** - @PostConstruct 初始化 4. **优雅集成** - 与 JavaFX 无缝整合 5. **依赖追踪** - 清晰的依赖关系 ## 注意事项 1. JavaFX 依赖设置为 `test` scope,仅用于演示 2. 控制器工厂必须在加载 FXML 前设置 3. FXML 文件路径相对于 classpath 4. 确保 JDK 21 和 JavaFX 21.0.2 版本匹配