Dynamic injection in Spring

I have two tax implementation classes IndianTaxCalculation and USTAxCalculation , which have implementations for the calculateTax() method. I need to populate a class dynamically based on the user's login, whether Indian or American, the appropriate tax calculation method should be called. How can I achieve this in Spring?

0
spring
source share
3 answers

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); } } 
+1
source share

I think the topic below can answer your question. Please refer to How to do conditional automatic posting in Spring?

0
source share

You can create a locator service, for example:

 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 is 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); } 

}

0
source share

All Articles