I have 2 tax implementation classes IndianTaxCalculation
and USTAxCalculation
which have implementaions for calculateTax()
method. I need
You can create a locator service like:
public class ServiceLocator implements ApplicationContextAware
{
private static ApplicationContext context;
public void setApplicationContext(ApplicationContext context)
{
this.context = context;
}
public static <T> T getServiceBean(Class<T> serviceClass, String beanName)
{
return context.getBean(beanName, serviceClass);
}
}
And your service like:
public void calculateTaxes(Client client)
{
if (client.isFromIndia())
{
ServiceLocator.getServiceBean(TaxCalculation.class, "indiaTaxBeanName").calculate(client);
}
else if (client.isFromUS())
{
ServiceLocator.getServiceBean(TaxCalculation.class, "usTaxBeanName").calculate(client);
}
}
Try something like this:
@Autowired
@Qualifier("indian")
private TaxCalculation indianTax;
@Autowired
@Qualifier("us")
private TaxCalculation usTax;
public void calculateTaxes(Client client) {
if (client.isFromIndia()) {
indiaTax.calculate(client);
} else if (client.isFromUS()) {
usTax.calculate(client);
}
}
I think the topic below can answer your question. Please refer to How to do conditional auto-wiring in Spring?