For a "main" bean, we should be using RootBeanDefintion rather than GenericBeanDefinition:

https://github.com/spring-projects/spring-boot/blob/2095991ff0027ca03a8f375c497576204974ee6f/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBeanRegistrar.java#L91-L98

In an arrangement where one is trying to programmatically reproduce such created definitions, it would be much nicer to rely on an attribute rather than on an implementation detail.

Also, having a single instance supplier for both value object and regular bean would avoid to check if the bean has already been processed and would make things more consistent. This also would have the advantage that no attribute is necessary.