코드는 부모 콩이 콩과 자바 구성을 사용하거나 @Component
주석을 사용하여 (및 유사 annotatios @Service
, @Repository
, @Component
등) 정의 된 콩에 대해 작동하지 않습니다.
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
for (String beanDefinitionName : beanFactory.getBeanDefinitionNames()) {
String beanClassName = getBeanClassName(beanDefinitionName, beanFactory);
}
}
private String getBeanClassName(String beanName, ConfigurableListableBeanFactory beanFactory) {
String beanClassName;
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
if (beanDefinition instanceof AnnotatedBeanDefinition) {
AnnotationMetadata metadata = ((AnnotatedBeanDefinition) beanDefinition).getMetadata();
beanClassName = metadata.getClassName();
} else {
beanClassName = beanDefinition.getBeanClassName();
while (beanClassName == null) {
BeanDefinition parentBeanDefinition = beanFactory.getBeanDefinition(beanDefinition.getParentName());
beanClassName = parentBeanDefinition.getBeanClassName();
beanDefinition = parentBeanDefinition;
}
}
return beanClassName;
}
주,이 방법을 사용하는 경우 팩토리 메소드에서 작동하지 않습니다 : 그것은 AnnotatedBeanDefinition
또는 빈 부모가있는 경우 경우 확인
그냥 확장. Java Doc가 말하듯이 :
또한 이것은 factory 메소드가 호출되는 클래스 일 수도 있고 메소드가 호출 된 factory bean 참조의 경우 비어있을 수도 있습니다. 따라서 이 아닌은 런타임시이 유형을 최종 빈 유형으로 간주하지만 개별 빈 정의 수준에서 구문 분석 용으로 만 사용하십시오.