我需要从单个控制器调用实现服务,具体取决于PathVariable

/{variable}/doSomething

public void controller(@PathVariable("variable") variable)

if variable == 1

  call service1Impl();

else if variable == 2

  call service2Impl();


但是我需要这样的控制器很简单并且不使用if,else

public void controller(...) {
  call service();
}


获取任何PathVariable时,我需要找到一些用于自动配置我的应用程序的解决方案,它应该知道需要调用哪个服务。

我尝试使用


加载Config.class作为上下文-@Configuration

@Configuration
public class AppConfig {

@Bean(name = "variableValue1")
public DummyService getService1() {
    return new DummyServiceImpl();
}

@Bean(name = "variableValue2")
public AnotherService getService2() {
    return new AnotherServiceImpl();
}


但是在控制器中,我需要将该配置作为上下文加载,然后不够清晰
豆工厂


它的工作,但我的控制器对我来说不够简单

我需要这样做,但它必须基于PathVariable而不是属性名称。

@Configuration
public class GreetingServiceConfig {

    @Bean
    @ConditionalOnProperty(name = "language.name", havingValue = "english", matchIfMissing = true)
    public GreetingService englishGreetingService() {
        return new EnglishGreetingService();
    }

    @Bean
    @ConditionalOnProperty(name = "language.name", havingValue = "french")
    public GreetingService frenchGreetingService() {
        return new FrenchGreetingService();
    }
}
------------------------------------------------
    @RestController
public class HomeController {

    @Autowired
    GreetingService greetingService;

    @RequestMapping("/")
    public String home() {
        return greetingService.greet();
    }
}

最佳答案

因此,基于路径变量,需要执行特定的方法。

这只是一个建议,因为您不想去其他地方

您可以为此使用Hashmap,

 HashMap<Integer, Runnable> hm = new HashMap<Integer, Runnable> ();


例如,

pathvariable是1->要执行的方法是method1()

pathvariable是2->要执行的方法是method2()

hm.put(1, method1())
hm.put(2, method2())


所以在控制器中

如果PathVariable为1,

hm.get(1).run(); // hm.get(variable).run()

10-06 11:56