我们正在尝试使用Spring DI重新实现的Web服务。
以下是它的工作原理: 在Web服务在控制器中接收的每个请求上,基于页面名称,我们实例化一个处理程序以获取可以处理请求的任务列表。
interface Handler {
List<Task> getTaskList();
}
class Controller {
//Inject handler
Handler handler;
processrequest(){
handler.getTasklist() -> execute
}
}
我们有大约5-6个这样的处理程序,我们希望根据请求页面名称将相应的处理程序注入控制器。
最好的办法是什么? 如何动态注入不同的处理程序?
由于
答案 0 :(得分:0)
1-在配置中创建处理程序(或注释您的服务实现):
@Bean
public Handler handler1() {
// return handler 1
}
@Bean
public Handler handler2() {
// return handler 2
}
2a-将ApplicationContext
注入您的控制器。根据请求映射检索所需的服务。
class Controller {
@Autowired
private ApplicationContext context;
@RequestMapping(value = "/handler1")
processrequest(){
Handler handler = context.getBean("handler1");
handler.getTasklist() -> execute
}
@RequestMapping(value = "/handler2")
processrequest(){
Handler handler = context.getBean("handler2");
handler.getTasklist() -> execute
}
}
2b-或者,创建多个控制器,并注入适当的处理程序。
@RequestMapping("/handler1")
class Controller1 {
@Autowired
@Qualifier("handler1")
private Handler handler;
processrequest(){
handler.getTasklist() -> execute
}
}
@RequestMapping("/handler2")
class Controller2 {
@Autowired
@Qualifier("handler2")
private Handler handler;
processrequest(){
handler.getTasklist() -> execute
}
}