Получение всех аннотированных контроллеров с @Controller - PullRequest
5 голосов
/ 09 марта 2012

Есть ли способ получить список всех контроллеров, которые были отмечены @Controller?Я хотел бы использовать их как:

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

Спасибо!

Ответы [ 2 ]

18 голосов
/ 09 марта 2012

getBeansWithAnnotation ()

Если вы аннотировали их с помощью контроллера ...:

@Autowired
private ListableBeanFactory listableBeanFactory;

, то

Map<String, Object> controllers;
controllers = listableBeanFactory.getBeansWithAnnotation(Controller.class);
2 голосов
/ 09 марта 2012
  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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...