我需要从单个控制器调用实现服务,具体取决于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()