There are quite a few "helper" beans, e.g. related to processing @ConfigurationProperties, and they all get manually registered as GenericBeanDefinitions with reflection-based instantiation strategies. Probably this is unnecessary (unless there are visibility issues, which also would need to be addressed if we change this). In the package "org.springframework.boot.context.properties" I see bean definitions registered for ConfigurationPropertiesBeanDefinitionValidator, ConfigurationPropertiesBindingPostProcessor, BoundConfigurationProperties, ConfigurationBeanFactoryMetadata, ConfigurationPropertiesBinder and ConfigurationPropertiesBinder$Factory, for instance. Searching for usage of GenericBeanDefinition and RootBeanDefinition will show up about the same number again in various places.
Comment From: wilkinsona
Re-opening to take care of some RootBeanDefinitions too.