Spring 弹簧动态注射
我有两个税务实现类Spring 弹簧动态注射,spring,Spring,我有两个税务实现类IndianTaxCalculation和USTAxCalculation,它们实现了calculateTax()方法。我需要根据用户登录动态填充该类,无论是印度还是美国,相应的税务计算方法都应该调用。我怎样才能在春天做到这一点呢?试试这样的方法: @Autowired @Qualifier("indian") private TaxCalculation indianTax; @Autowired @Qualifier("us") private TaxCalculation
IndianTaxCalculation
和USTAxCalculation
,它们实现了calculateTax()
方法。我需要根据用户登录动态填充该类,无论是印度还是美国,相应的税务计算方法都应该调用。我怎样才能在春天做到这一点呢?试试这样的方法:
@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);
}
}
我认为下面的主题可以回答你的问题。请参阅
您可以创建定位器服务,如:
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);
}
}
@Bean
不用于注入Bean。它是用来申报的。需要的是@自动连线
,带有@限定符
。