2014-09-26 91 views
0

我有2個稅收實施類別IndianTaxCalculationUSTAxCalculation,它們具有用於calculateTax()方法的實施方案。我需要基於用戶登錄動態填充類,無論是印度還是美國,相應的稅務計算方法應該調用。我怎樣才能在Spring中實現這一點?春季動態注射

回答

1

嘗試這樣:

@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

'@ Bean'不用於注入一個豆子。它用來聲明一個。需要的是@ @ Autowired',帶'@ Qualifier'。 – 2014-09-26 06:05:09

+0

@JBNizet,謝謝。我會更新答案 – WeMakeSoftware 2014-09-26 07:11:25

0

您可以創建像定位服務:

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

和您的服務,如:

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

}