Obtener todos los controladores anotados con @Controller

¿Hay alguna manera de obtener una lista de todos los Controladores, que fueron anotados con @Controller? Me gustaría usarlos como:

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

¡Gracias!

preguntado el 09 de marzo de 12 a las 14:03

Me interesa saber por qué querrías hacer esto. Sólo curioso. -

Tenga en cuenta que las clases anotadas con @Controller no necesariamente comparten un ancestro común además de java.lang.Object. -

@aglassman para crear documentación? -

2 Respuestas

getBeansWithAnnotation()

Si los ha anotado con el controlador ...:

@Autowired
private ListableBeanFactory listableBeanFactory;

luego

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

Respondido 01 Jul 16, 22:07

  1. Probablemente también puedas usar el hecho de que <context-component:scan /> y BeanFactory hace la mayor parte de esto por usted. @NimChimpsky dio un excelente ejemplo.

  2. Puede escanear el classpath, usando cualquiera

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;
}

Respondido 01 Jul 16, 22:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.