【发布时间】:2015-11-13 16:45:26
【问题描述】:
我正在实现 BeanFactoryPostProcessor 并且我正在尝试提取 bean 定义类名:
@Component
public class MyFactory implements BeanFactoryPostProcessor{
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
String[] beanDefinitionNames = beanFactory.getBeanDefinitionNames();
for (String name : beanDefinitionNames) {
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(name);
// 'null' when using JavaConfig, 'java.lang.String' when using XML
System.out.println(beanDefinition.getBeanClassName());
}
}
}
当我通过 XML 配置我的 bean 时,我得到类名没有任何问题:
<bean id="arbitraryString" class="java.lang.String"/>
<bean class="com.test.MyFactory"/>
但是,当我使用 JavaConfig 并在那里定义一个 bean(用于演示目的的简单字符串)时,类名将为 null:
@Bean
public String arbitraryString () {
return "the bean definition class name will be null";
}
我已尝试搜索此内容,但无法理解我是否做错了什么或这是预期的行为。我在我的主要方法中没有做任何其他事情,而是加载上下文(无论是 XML 还是配置类)。
【问题讨论】:
-
您是否尝试过在注释中提供 Bean 名称?
@Bean(name = "arbitraryString") -
可能重复:stackoverflow.com/questions/17155539/… 这似乎是预期的行为
-
@MichaelMurray 刚刚尝试过,仍然为空。
-
@pandaadb 这不是重复的,我确实找到了这个问题,但它没有解决在这种情况下使用 JavaConfig 和 xml 之间的区别。
标签: java spring spring-java-config