Spring、JavaConfig、BeanDefinition和空getBeanClassName

Spring、JavaConfig、BeanDefinition和空getBeanClassName,java,spring,spring-boot,Java,Spring,Spring Boot,如果Springbean配置了JavaConfig,那么它的BeanDefinition无法解析BeanClassName,并返回null。 xml或注释配置也同样适用。 有什么问题吗?如何修复 Spring引导出现问题的示例代码,仅添加导入: 接口Foo{} 类FooImpl实现Foo{} @组件扫描 @启用自动配置 @配置 公共类应用程序实现CommandLineRunner{ 公共静态void main(字符串…参数){ SpringApplication.run(App.class,ar

如果Springbean配置了JavaConfig,那么它的BeanDefinition无法解析BeanClassName,并返回null。 xml或注释配置也同样适用。 有什么问题吗?如何修复

Spring引导出现问题的示例代码,仅添加导入:

接口Foo{}
类FooImpl实现Foo{}
@组件扫描
@启用自动配置
@配置
公共类应用程序实现CommandLineRunner{
公共静态void main(字符串…参数){
SpringApplication.run(App.class,args);
}
@Bean(name=“foo”)
Foo getFoo(){返回新的FooImpl();}
@自动连线
私有可配置列表Bean工厂;
@凌驾
公共无效运行(字符串…参数){
BeanDefinition定义=工厂.getBeanDefinition(“foo”);
System.out.println(definition.getBeanClassName());
}
}

我在YouTube上观看Spring研讨会时遇到了同样的问题,该研讨会使用基于XML的配置。当然,我的解决方案尚未投入生产,看起来像是一个黑客,但它解决了我的问题:

BeanDefinition beanDefinition;
AnnotatedBeanDefinition annotatedBeanDefinition = (AnnotatedBeanDefinition) bd;
StandardMethodMetadata factoryMethodMetadata = (StandardMethodMetadata) annotatedBeanDefinition.getFactoryMethodMetadata();
Class<?> originalClass = factoryMethodMetadata.getIntrospectedMethod().getReturnType();

@Configuration
@ComponentScan(value = "foo.bar")
public class Config {}
package foo.bar.model.impl

@Component
class FooImpl implements Foo {...}