有没有办法获取所有使用@Controller
注释的控制器列表?我想用它们像:
@Autowired
public void addAll(List<Controller> controllers) throws Exception {
for (Controller controller : controllers) {
...
}
}
谢谢!
答案 0 :(得分:18)
如果你用控制器注释了它们......:
@Autowired
private ListableBeanFactory listableBeanFactory;
然后
Map<String, Object> controllers;
controllers = listableBeanFactory.getBeansWithAnnotation(Controller.class);
答案 1 :(得分:2)
您也可以使用<context-component:scan />
和BeanFactory为您完成大部分工作的事实。 @NimChimpsky
给出了一个很好的例子。
您可以使用
扫描类路径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;
}