Я реализует BeanFactoryPostProcessor
и я пытаюсь извлечь бин имен классов:Spring имя класса определения компоненты является нулем при использовании JavaConfig
@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 id="arbitraryString" class="java.lang.String"/>
<bean class="com.test.MyFactory"/>
Однако, когда я использую JavaConfig и определить боб там (простая строка для демонстрационных целей), имя класса будет нулевым:
@Bean
public String arbitraryString() {
return "the bean definition class name will be null";
}
Я пробовал искать это и не мог понять, что я делаю что-то неправильно или это ожидаемое поведение. Я не делаю ничего другого в своем основном методе, но загружаю контекст (будь то XML или config class).
Вы пробовали поставлять имя компонента в аннотации? '@Bean (name =" произвольныйString ")' –
Возможный дубликат: http://stackoverflow.com/questions/17155539/spring-bean-getting-confused Это, по-видимому, ожидается поведение – pandaadb
@MichaelMurray просто попытался сейчас, все еще получая ноль. – Ozilophile