@Component public class StrategyOne { public static final Map<String, LoginServiceBiz> SERVICE_MAP = new ConcurrentHashMap<>(); public StrategyOne(List<LoginServiceBiz> login) { System.out.println("开始注入策略"); login.forEach(t -> { System.out.println("当前策略:" + t.getClass().getName()); SERVICE_MAP.put(t.getLoginType(), t); }); System.out.println("注入策略完毕"); } public LoginService getHandler(String type) { return SERVICE_MAP.get(type); } }
@Component public class StrategyTwo implements ApplicationContextAware, InitializingBean { private ApplicationContext applicationContext; private static final Map<String, LoginServiceBiz> SERVICE_MAP = new ConcurrentHashMap<>(); @Override public void afterPropertiesSet() { applicationContext.getBeansOfType(LoginServiceBiz.class).values().forEach(h -> SERVICE_MAP.put(h.getLoginType(), h)); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public LoginService getHandler(String type) { return SERVICE_MAP.get(type); } }