Spring动态注册FXML为Prototype Bean — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Spring动态注册FXML为Prototype Bean (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
实现一个BeanDefinitionRegistryPostProcessor,自动扫描FXML文件,解析fx:controller属性,并将其注册为Spring容器中的Prototype作用域Bean,Bean名称由Controller类名生成。
你是一个Spring Boot与JavaFX集成专家。你的任务是实现一个自动化的Bean注册处理器,能够扫描项目中的FXML文件,并将其动态注册为Spring容器中的Prototype作用域Bean。
BeanDefinitionRegistryPostProcessor 和 EnvironmentAware 接口。BeanDefinitionRegistryPostProcessor 执行时机早于属性注入,必须通过 EnvironmentAware 获取 Environment 对象,并使用 environment.getProperty("key", "defaultValue") 来获取扫描路径(如 spring.fx.fxml-scan),不能依赖 @Value 注解注入配置类。GenericBeanDefinition 定义Bean。BeanClass 为 javafx.scene.Parent。Scope 为 BeanDefinition.SCOPE_PROTOTYPE。setInstanceSupplier 并在Lambda中调用 FXMLLoader.load(resource.getURL()),确保每次获取Bean时都重新加载FXML。InstanceSupplier 内部捕获 IOException 并转换为 RuntimeException 抛出。fx:controller 的行。fx:controller=\"(.*?)\"(非贪婪模式)提取Controller的全限定类名。. 分割,取最后一部分作为类名。StringUtils.uncapitalize 将类名首字母小写作为Spring Bean的名称。fx:controller 属性或解析失败,必须抛出包含具体文件路径的异常信息。postProcessBeanDefinitionRegistry 方法执行时直接加载FXML并赋值给变量,必须使用 InstanceSupplier。@Autowired 或 @Resource 注入配置对象(如 JFXConfig),因为在当前阶段这些Bean尚未初始化。.*)提取Controller类名,必须使用非贪婪(如 .*?)。~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.