如果使用JavaConfig配置Spring,则BeanDefinition无法解析BeanClassName,并返回null。与xml或注释配置一样,配置也能很好地工作。有什么问题吗?怎么修?
Spring有问题的示例代码,只添加导入:
interface Foo {}
class FooImpl implements Foo {}
@ComponentScan
@EnableAutoConfiguration
@Configuration
public class App implements CommandLineRunner {
public static void main(String... args) {
SpringApplication.run(App.class, args);
}
@Bean(name = "foo")
Foo getFoo() { return new FooImpl(); }
@Autowired
private ConfigurableListableBeanFactory factory;
@Override
public void run(String... args) {
BeanDefinition definition = factory.getBeanDefinition("foo");
System.out.println(definition.getBeanClassName());
}
}发布于 2018-02-19 13:42:57
在观看使用基于XML的配置的YouTube春季研讨会时,我也遇到了同样的问题。当然,我的解决方案还没有准备好生产,看上去像黑客,但它解决了我的问题:
BeanDefinition beanDefinition;
AnnotatedBeanDefinition annotatedBeanDefinition = (AnnotatedBeanDefinition) bd;
StandardMethodMetadata factoryMethodMetadata = (StandardMethodMetadata) annotatedBeanDefinition.getFactoryMethodMetadata();
Class<?> originalClass = factoryMethodMetadata.getIntrospectedMethod().getReturnType();编辑1 --事实证明,如果您使用原型注释在配置类之外定义bean,那么一切都会很好:
@Configuration
@ComponentScan(value = "foo.bar")
public class Config {}和
package foo.bar.model.impl
@Component
class FooImpl implements Foo {...}https://stackoverflow.com/questions/26852085
复制相似问题