Dynamic injection in Spring

后端 未结 3 783
予麋鹿
予麋鹿 2021-01-29 05:00

I have 2 tax implementation classes IndianTaxCalculation and USTAxCalculation which have implementaions for calculateTax() method. I need

相关标签:
3条回答
  • 2021-01-29 05:24

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

    }

    0 讨论(0)
  • 2021-01-29 05:29

    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);
       }
    }
    
    0 讨论(0)
  • 2021-01-29 05:33

    I think the topic below can answer your question. Please refer to How to do conditional auto-wiring in Spring?

    0 讨论(0)
提交回复
热议问题