问题日志:
�[31mWARN �[0;39m �[36mo.s.c.annotation.ConfigurationClassPostProcessor:514�[0;39m - Cannot enhance @configuration bean definition 'com.yomahub.liteflow.springboot.config.LiteflowMainAutoConfiguration' since its singleton instance has been created too early. The typical cause is a non-static @bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static' and/or marking the containing configuration class as 'proxyBeanMethods=false'.
分析处理:
-
LiteflowMainAutoConfiguration 类注解:
@configuration // ← 标记为 @configuration,Spring 默认会对它做 CGLIB 代理增强
@AutoConfigureAfter(LiteflowPropertyAutoConfiguration.class)
@ConditionalOnBean(LiteflowConfig.class)
public class LiteflowMainAutoConfiguration {
注意:没有 proxyBeanMethods = false,Spring 会用 CGLIB 生成代理类来保证 @bean 方法间的 Full Mode 语义。2. 关键 @bean 方法:
@bean
public DeclBeanDefinition declBeanDefinition() {
return new DeclBeanDefinition();
}
-
DeclBeanDefinition 实现了 BeanDefinitionRegistryPostProcessor:
public class DeclBeanDefinition
implements BeanDefinitionRegistryPostProcessor { // ← 关键!
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
// 扫描 @LiteflowComponent 注解的类,注册为 BeanDefinition
}
}
触发机制
Spring 的 ConfigurationClassPostProcessor 需要对 @configuration 类做 CGLIB 增强,以保证 Full Mode 下 @bean 方法间调用返回同一个 Bean。但增强时机有严格要求:
Spring 在处理 BeanDefinitionRegistryPostProcessor 时,必须立即实例化 DeclBeanDefinition
而 DeclBeanDefinition 是 LiteflowMainAutoConfiguration 的 @bean 方法返回的
因此 LiteflowMainAutoConfiguration 自身也被提前实例化了
当 Spring 事后尝试对 LiteflowMainAutoConfiguration 做 CGLIB 增强时,发现它已经是单例了——无法再增强一个已实例化的对象
这就是警告的精确原因:一个返回 BeanDefinitionRegistryPostProcessor 类型的非 static @bean 方法,导致了配置类被提前实例化。
影响
该警告无害,不影响功能。 原因:
LiteflowMainAutoConfiguration 的 @bean 方法之间没有互相调用(declBeanDefinition() 不调用 componentScanner() 等),Full Mode 语义不必要
CGLIB 增强失败只意味着这些 @bean 方法退化为 Lite Mode 行为,结果完全一致
LiteFlow 的规则引擎、组件扫描、链路执行均不受影响
结论:这是 LiteFlow 框架内部的代码结构问题,@bean 方法返回 BeanDefinitionRegistryPostProcessor 且非 static,导致配置类被提前实例化而无法 CGLIB 增强。该警告不影响任何功能,可安全忽略。
问题日志:
�[31mWARN �[0;39m �[36mo.s.c.annotation.ConfigurationClassPostProcessor:514�[0;39m - Cannot enhance @configuration bean definition 'com.yomahub.liteflow.springboot.config.LiteflowMainAutoConfiguration' since its singleton instance has been created too early. The typical cause is a non-static @bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static' and/or marking the containing configuration class as 'proxyBeanMethods=false'.
分析处理:
LiteflowMainAutoConfiguration 类注解:
@configuration // ← 标记为 @configuration,Spring 默认会对它做 CGLIB 代理增强
@AutoConfigureAfter(LiteflowPropertyAutoConfiguration.class)
@ConditionalOnBean(LiteflowConfig.class)
public class LiteflowMainAutoConfiguration {
注意:没有 proxyBeanMethods = false,Spring 会用 CGLIB 生成代理类来保证 @bean 方法间的 Full Mode 语义。2. 关键 @bean 方法:
@bean
public DeclBeanDefinition declBeanDefinition() {
return new DeclBeanDefinition();
}
DeclBeanDefinition 实现了 BeanDefinitionRegistryPostProcessor:
public class DeclBeanDefinition
implements BeanDefinitionRegistryPostProcessor { // ← 关键!
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
// 扫描 @LiteflowComponent 注解的类,注册为 BeanDefinition
}
}
触发机制
Spring 的 ConfigurationClassPostProcessor 需要对 @configuration 类做 CGLIB 增强,以保证 Full Mode 下 @bean 方法间调用返回同一个 Bean。但增强时机有严格要求:
Spring 在处理 BeanDefinitionRegistryPostProcessor 时,必须立即实例化 DeclBeanDefinition
而 DeclBeanDefinition 是 LiteflowMainAutoConfiguration 的 @bean 方法返回的
因此 LiteflowMainAutoConfiguration 自身也被提前实例化了
当 Spring 事后尝试对 LiteflowMainAutoConfiguration 做 CGLIB 增强时,发现它已经是单例了——无法再增强一个已实例化的对象
这就是警告的精确原因:一个返回 BeanDefinitionRegistryPostProcessor 类型的非 static @bean 方法,导致了配置类被提前实例化。
影响
该警告无害,不影响功能。 原因:
LiteflowMainAutoConfiguration 的 @bean 方法之间没有互相调用(declBeanDefinition() 不调用 componentScanner() 等),Full Mode 语义不必要
CGLIB 增强失败只意味着这些 @bean 方法退化为 Lite Mode 行为,结果完全一致
LiteFlow 的规则引擎、组件扫描、链路执行均不受影响
结论:这是 LiteFlow 框架内部的代码结构问题,@bean 方法返回 BeanDefinitionRegistryPostProcessor 且非 static,导致配置类被提前实例化而无法 CGLIB 增强。该警告不影响任何功能,可安全忽略。