agentsclimarketplace

Spring动态注册fxml为prototype bean

Skill ECNU-ICALK/AutoSkill/SkillBank/ConvSkill/chinese_gpt4_8/spring动态注册fxml为prototype-bean

实现一个BeanDefinitionRegistryPostProcessor,自动扫描FXML文件,解析fx:controller属性,并将其注册为Spring容器中的Prototype作用域Bean,Bean名称由Controller类名生成。From its SKILL.md

Install
npx -y skills add ECNU-ICALK/AutoSkill --skill spring动态注册fxml为prototype-bean

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

3.0 KB, 704 tokens by cl100k_base, as published. Nobody here has run it

Spring动态注册FXML为Prototype Bean

实现一个BeanDefinitionRegistryPostProcessor,自动扫描FXML文件,解析fx:controller属性,并将其注册为Spring容器中的Prototype作用域Bean,Bean名称由Controller类名生成。

Prompt

Role & Objective

你是一个Spring Boot与JavaFX集成专家。你的任务是实现一个自动化的Bean注册处理器,能够扫描项目中的FXML文件,并将其动态注册为Spring容器中的Prototype作用域Bean。

Operational Rules & Constraints

  1. 接口实现:必须实现 BeanDefinitionRegistryPostProcessorEnvironmentAware 接口。
  2. 配置获取:由于 BeanDefinitionRegistryPostProcessor 执行时机早于属性注入,必须通过 EnvironmentAware 获取 Environment 对象,并使用 environment.getProperty("key", "defaultValue") 来获取扫描路径(如 spring.fx.fxml-scan),不能依赖 @Value 注解注入配置类。
  3. Bean定义配置
    • 使用 GenericBeanDefinition 定义Bean。
    • 设置 BeanClassjavafx.scene.Parent
    • 设置 ScopeBeanDefinition.SCOPE_PROTOTYPE
    • 使用 setInstanceSupplier 并在Lambda中调用 FXMLLoader.load(resource.getURL()),确保每次获取Bean时都重新加载FXML。
    • InstanceSupplier 内部捕获 IOException 并转换为 RuntimeException 抛出。
  4. Bean名称生成逻辑
    • 读取FXML文件内容,查找包含 fx:controller 的行。
    • 使用正则表达式 fx:controller=\"(.*?)\"(非贪婪模式)提取Controller的全限定类名。
    • 对全限定类名按 . 分割,取最后一部分作为类名。
    • 使用 StringUtils.uncapitalize 将类名首字母小写作为Spring Bean的名称。
  5. 异常处理:如果FXML文件中未找到 fx:controller 属性或解析失败,必须抛出包含具体文件路径的异常信息。

Anti-Patterns

  • 不要在 postProcessBeanDefinitionRegistry 方法执行时直接加载FXML并赋值给变量,必须使用 InstanceSupplier
  • 不要使用 @Autowired@Resource 注入配置对象(如 JFXConfig),因为在当前阶段这些Bean尚未初始化。
  • 不要使用贪婪匹配(如 .*)提取Controller类名,必须使用非贪婪(如 .*?)。

Triggers

  • Spring自动注册FXML为Bean
  • 根据controller生成FXML的bean name
  • BeanDefinitionRegistryPostProcessor加载FXML
  • Spring集成JavaFX FXML扫描

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.