Skip to content

无法启动 #111

@weihanhan

Description

@weihanhan

描述bug内容
SpringBoot 项目,使用文档中的 jdk1.8,用常规方法(IDEA、Java 命令)均直接可以启动,但使用插件或 Java 命令+工具 JVM 参数时无法启动。
已知四个类的关系如下:

// 抽象父类
public abstract class AbstractParent {
}
// 子类 A,通过 @Service 注册
@Service
public class SubA extends AbstractParent {
}
// 子类 B,通过 @Service 注册
@Service
public class SubB extends AbstractParent {
}
// 子类 C,通过 @Service 注册,并通过 @Autowired 注入 SubA
@Service
public class SubC extends AbstractParent {
    @Autowired
    private SubA subA;
}

AbstractParent 还有 SubD、SubE 等多个子类注册在容器中,在 Spring 向 SubC 注入依赖时打断点,调用 beanFactory.getBeansOfType(AbstractParent .class) 发现 AbstractParent 的所有子类 Bean 都变成了 com.xxx.SubB$HOTSWAPAGENT_$$EnhancerBySpringCGLIB$$5bbd8b67@34285
版本信息

  • DebugTools版本: 4.3.0
  • bug中间件的版本: Spring core version 5.3.27

日志信息

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[2025-08-27 10:48:51.541] [22888] [ERROR] [,,] [main] [o.s.boot.SpringApplication              ] 870: Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'subC': Unsatisfied dependency expressed through field 'subA'; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'subA' is expected to be of type 'com.xxx.SubA' but was actually of type 'com.xxx.SubB$HOTSWAPAGENT_$$EnhancerBySpringCGLIB$$5bbd8b67'
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:453)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:343)
	at com.xxx.Application.main(AmoApplication.java:79)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'subA' is expected to be of type 'com.xxx.SubA' but was actually of type 'com.xxx.SubB$HOTSWAPAGENT_$$EnhancerBySpringCGLIB$$5bbd8b67'
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1401)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
	... 19 common frames omitted

如何复现

  • 在我工作的项目中能稳定出现,但我写了一个简单的 SpringBoot demo 却无法复现...

复现demo文件

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions