Description
I'm currently writing a small BeanFactoryPostProcessor
and for that I need to process annotations on @Bean
methods. Or at least detect the bean definition based on that metadata. I was expecting that getBeanNamesForAnnotation
(and friends) would also take annotations on @Bean
methods into consideration. However it only works for annotated types.
So when doing something like this.
@Component
@CustomAnnotation
public class MyClass { ... }
It works. But doing the same on an @Bean
annotated method doesn't work.
@Bean
@CustomAnnotation
public MyClass myClass() { ... }
It would be nice if the methods would return beans (or bean definitions) annotated throuhg @Bean
methods as well. Especially if we want to apply this to beans that aren't under our own control (i.e. external libraries).
For the Spring annotations like @Lazy
, @Primary
etc. this already works but those are handled in specialized cases when parsing the configuration files. @Lazy
on a component works the same as @Lazy
on a @Bean
method.
In this particulair case I wanted to detect beans with a special annotation so that we could register them in JNDI. It works when annotating the component with our specialized annotation not when using the annotation on @Bean
methods. This is especially annoying for classes that are outside of our control.
Currently the only way is to extend the class only for adding the annotation.