Most Spring developers know about the BeanPostProcessor and the BeanFactoryPostProcessor classes. The former enables changes to new bean instances before they can be used, while the latter lets you modify bean definitions - the metadata to create the bean. Commons use-cases include: Bootstrapping processing of @Configuration classes, via ConfigurationClassPostProcessorResolving ${…} placeholders, through PropertyPlaceholderConfigurerAutowiring of annotated fields, setter methods and