使用@Controller获取所有带注释的控制器

时间:2012-03-09 14:30:06

标签: java spring annotations

有没有办法获取所有使用@Controller注释的控制器列表?我想用它们像:

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

谢谢!

2 个答案:

答案 0 :(得分:18)

getBeansWithAnnotation()

如果你用控制器注释了它们......:

@Autowired
private ListableBeanFactory listableBeanFactory;

然后

Map<String, Object> controllers;
controllers = listableBeanFactory.getBeansWithAnnotation(Controller.class);

答案 1 :(得分:2)

  1. 您也可以使用<context-component:scan />BeanFactory为您完成大部分工作的事实。 @NimChimpsky给出了一个很好的例子。

  2. 您可以使用

    扫描类路径
  3. 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;
    }