2012-03-09 54 views
3

有沒有辦法獲得所有控制器的列表,這些控制器的註釋是@Controller?我想用他們喜歡:使用@Controller獲取所有帶註釋的控制器

@Autowired 
public void addAll(List<Controller> controllers) throws Exception { 
    for (Controller controller : controllers) { 
     ... 
    } 
} 

謝謝!

+3

我感興趣的是,爲什麼你會想這樣做?只是好奇。 – aglassman 2012-03-09 14:39:45

+0

請注意,使用@Controller註解的類不一定共享除java.lang.Object之外的共同祖先。 – 2012-03-09 14:59:21

+0

@aglassman創建文檔? – NimChimpsky 2016-08-08 23:49:13

回答

15

getBeansWithAnnotation()

如果您有控制器註解他們...:

@Autowired 
private ListableBeanFactory listableBeanFactory; 

然後

Map<String, Object> controllers; 
controllers = listableBeanFactory.getBeansWithAnnotation(Controller.class); 
2
  1. 你或許可以也用事實<context-component:scan />BeanFactory做這個最適合你。 @NimChimpsky舉了一個很好的例子。

  2. 您可以掃描類路徑,即使用

public List<Class> scanForComponents() { 
    List<Class> components = new LinkedList<Class>(); 
    ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false); 
    scanner.addIncludeFilter(new AnnotationTypeFilter(Component.class)); 

    for (String componentBasePacke : componentBasePackages) { 
     for (BeanDefinition bd : scanner.findCandidateComponents(componentBasePacke)) { 
      try { 
       components.add(Class.forName(bd.getBeanClassName())); 
      } catch (ClassNotFoundException ex) { 
      } 
     } 
    } 

    return components; 
} 
相關問題