version: 5.2.12.RELEASE Expect: StackOverflowError or BeanCreationException But: java.lang.NoClassDefFoundError: Could not initialize class org.springframework.beans.factory.BeanCreationException

@Configuration
public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Test.class);
        System.out.println(context.getBean("aaa"));
    }
    @Component("aaa")
    static class A implements FactoryBean<String>, BeanFactoryAware {
        private BeanFactory beanFactory;
        @Override
        public String getObject() throws Exception {
            beanFactory.getBean("aaa");
            return "sss";
        }
        @Override
        public Class<?> getObjectType() {
            return String.class;
        }
        @Override
        public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
            this.beanFactory = beanFactory;
        }
    }
}

Comment From: AvengerEug

First, The main function of context.getBean("aaa") code is to obtain the beans maintained internally by factorybean that is "sss". If You call it again in getObject that will occur loop recursion. finally, it cause method call stack memory overflow. So, you can't call it in getObject again.

Comment From: snicoll

Expect: StackOverflowError or BeanCreationException But: java.lang.NoClassDefFoundError: Could not initialize class org.springframework.beans.factory.BeanCreationException

Running your sample with a supported version of the framework, I get:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'aaa': FactoryBean threw exception on object creation
    ... 1024 more
Caused by: java.lang.StackOverflowError
    at java.base/java.lang.Module.implIsExportedOrOpen(Module.java:618)
    at java.base/java.lang.Module.isExported(Module.java:530)
    at java.base/sun.invoke.util.VerifyAccess.isModuleAccessible(VerifyAccess.java:262)
    at java.base/sun.invoke.util.VerifyAccess.isClassAccessible(VerifyAccess.java:230)
    at java.base/sun.invoke.util.VerifyAccess.isMemberAccessible(VerifyAccess.java:104)
    at java.base/java.lang.invoke.MethodHandles$Lookup.checkAcces

Sorry this got overlooked.