You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring无法通过工厂方法创建UpdatingBatch Bean问题求助

问题原因与解决方案

原因分析

你遇到的问题核心在于@StepScope的作用机制:

  • 当@Bean方法搭配@StepScope使用时,Spring不会直接调用你的updatingBatch()方法创建实例,而是会为该Bean生成代理对象,以此实现Step级别的延迟实例化(直到Batch的Step真正执行时才会创建真实对象)。
  • 默认情况下,@StepScope使用CGLIB代理方式,这种代理需要生成目标类的子类。但com.filenet.api.core.UpdatingBatch没有可访问的构造方法(比如构造方法是私有、包级私有,或JVM生成的无参构造不可见),导致CGLIB无法生成子类,从而抛出错误。

解决方案

针对这个问题,优先推荐以下可行方案:

切换为JDK动态代理

如果UpdatingBatch实现了某个接口,直接修改@StepScope的代理模式为接口代理即可。这种方式不需要生成子类,也就不需要目标类的构造方法:

@Bean
@StepScope(proxyMode = ScopedProxyMode.INTERFACES)
public UpdatingBatch updatingBatch(OSRefEnabledFileNetConnectionContext context) {
    return UpdatingBatch.createUpdatingBatchInstance(context, Refreshmode.OFF);
}

补充说明

如果UpdatingBatch是自定义类,还可以通过修改其构造方法为public/包级可见来适配CGLIB代理,但显然这不适用于FileNet的第三方类,因此第一种方案是最优解。

内容的提问来源于stack exchange,提问作者apboutos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:33:08