Skip to content

Instantly share code, notes, and snippets.

@wooklab
Created August 4, 2021 04:08
Show Gist options
  • Save wooklab/2931b272409f62bf39334291c3d1bd2d to your computer and use it in GitHub Desktop.
Save wooklab/2931b272409f62bf39334291c3d1bd2d to your computer and use it in GitHub Desktop.
EnumBeanFactory for using beans of the same type.
public APricePolicy implements PricePolicy {
@OOverride
public void apply(PolicyInfo policyInfo) {
// implements logic..
}
}
@Service
@RequiredArgsConstructor
public class Client {
private final EnumBeanFactory enumBeanFactory;
public void process(PolicyInfo policyInfo) {
// ..
enumBeanFactory.getBean(PricePolicyType.A).apply(policyInfo);
// or
enumBeanFactory.getBean(PricePolicyType.B).apply(policyInfo);
// or
enumBeanFactory.getBean(PricePolicyType.C).apply(policyInfo);
// ..
}
}
public interface EnumBeanAble<T> {
Class<? extends T> serviceClass();
}
@Service
@RequiredArgsConstructor
public class EnumBeanFactory {
private final ApplicationContext applicationContext;
public <T> T getBean(EnumBeanAble<T> e) {
return applicationContext.getBean(e.serviceClass());
}
}
@RequiredArgsConstructor
public enum PricePolicyType implements EnumBeanAble<PricePolicy> {
A(APricePolicy.class),
B(BPricePolicy.class),
C(CPricePolicy.class);
private final Class<? extends PricePolicy> serviceClass;
@Override
public Class<? extends PricePolicy> serviceClass() {
return serviceClass;
}
}
public interface PricePolicy {
void apply(PolicyInfo policyInfo);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment