복붙노트

[SPRING] @Controller를 사용하여 주석이 달린 모든 컨트롤러 가져 오기

SPRING

@Controller를 사용하여 주석이 달린 모든 컨트롤러 가져 오기

@Controller로 주석이 달린 모든 컨트롤러 목록을 얻을 수있는 방법이 있습니까? 나는 그것들을 다음과 같이 사용하고 싶다.

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

감사!

해결법

  1. ==============================

    1.getBeansWithAnnotation ()

    getBeansWithAnnotation ()

    컨트롤러에 주석을 달았 으면 ... :

    @Autowired
    private ListableBeanFactory listableBeanFactory;
    

    그때

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

    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;
    }
    
  3. from https://stackoverflow.com/questions/9635694/getting-all-annotated-controllers-with-controller by cc-by-sa and MIT license