我有一个使用
检索的注释列表java.lang.reflect.Method.getDeclaredAnnotations()
使用这些注释,如何检索标记的的spring bean 有这些注释吗?
伪代码:
public interface Work{...}
@Component
@A1
public class SpringBean1 implements Work{}
@Component
@A2
public class SpringBean2 implements Work{}
public class Test
{
public void doSomething()
{
Annotation[] annotations = getAnnotationsListUsingReflection();
for(Annotation annotation: annotations)
{
Work work = /* Retrieve bean using annotation, how to do this? */
work.xyz();
......
}
}
}
答案 0 :(得分:2)
假设您的注释是注释bean类型而不是它们的方法,您可以使用ListableBeanFactory#getBeanNamesForAnnotation(Class)
。
查找
Class
具有提供的Annotation
类型的bean的所有名称, 没有创建任何bean实例。
AnnotationConfigApplicationContext
是该界面的一个实现。
鉴于此类实例
AnnotationConfigApplicationContext ctx = ...;
String[] beanNames = ctx.getBeanNamesForAnnotation(Annotation.class);
然后遍历bean名称并获取每个bean
for (String beanName : beanNames) {
Object bean = ctx.getBean(beanName);
// use it
}
或者,ListableBeanFactory#getBeansWithAnnotation(Class)
可以为您完成工作:
查找
Class
提供Annotation
类型的所有bean,并返回 带有相应bean实例的Map
个bean名称。