Affects: 6.1.11

BeanDefinitions created from static bean method contains invalid attribute BeanClassName (if refers to configuration class instead of bean class).

Reproduce:

  • create a configuration class with static bean:
@Configuration
public class ThisIsConfigClass {

    public static class ThisIsBeanClass {
    }

    // static definition
    @Bean
    public static ThisIsBeanClass thisIsBean() {
        return new ThisIsBeanClass();
    }
}
  • add listener class to check an application context:
@Component
public class LoggingListener {

    @Autowired
    GenericApplicationContext applicationContext;

    @EventListener(classes = ApplicationReadyEvent.class)
    void onApplicationReady() {
        var beanDefinition = applicationContext.getBeanDefinition("thisIsBean");
        System.out.println("getFactoryBeanName: " + beanDefinition.getFactoryBeanName());
        System.out.println("getBeanClassName: " + beanDefinition.getBeanClassName());
    }
}
  • expected output (for static bean definition):
getFactoryBeanName: null
getBeanClassName: com.example.ThisIsConfigClass$ThisIsBeanClass
  • actual:
getFactoryBeanName: null
getBeanClassName: com.example.ThisIsConfigClass

Comment From: snicoll

This is the expected behavior, please review the Javadoc of getBeanClass.