@Component
public class StrategyOne {
public static final Map SERVICE_MAP = new ConcurrentHashMap<>();
public StrategyOne(List 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 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);
}
}