更多获取方式看 spring的获取容器中的bean
    按名字, 注解, 继承, 接口等等各种方式获取

    定义

    1. @Service("commandToolFactory")
    2. public class CommandToolFactory implements ApplicationContextAware, InitializingBean {
    3. private Map<String, CommandToolHandler> handlerMap;
    4. private ApplicationContext applicationContext;
    5. @Override
    6. public void afterPropertiesSet() throws Exception {
    7. final Map<String, CommandToolHandler> handlerMap =
    8. this.applicationContext.getBeansOfType(CommandToolHandler.class);
    9. this.handlerMap = handlerMap;
    10. }
    11. @Override
    12. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    13. this.applicationContext = applicationContext;
    14. }
    15. public CommandToolHandler getToolHandler(String cate) {
    16. return this.handlerMap.get(cate + "ToolHandler");
    17. }
    18. }

    目标的类是 NormalToolHandler
    使用

    1. @Autowired
    2. private CommandToolFactory commandToolFactory;
    3. CommandToolHandler handler = this.commandToolFactory.getToolHandler(orderType.getKey());