Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 弹簧动态注射_Spring - Fatal编程技术网

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。它是用来申报的。需要的是
@自动连线
,带有
@限定符