从不同的servlet在同一个控制器中注入不同的服务bean实现

时间:2014-12-02 16:49:42

标签: java spring spring-mvc

我是基于注释的控制器的新手。我有两个像这样的servlet:

url的pathA-servlet:pathA / * url的pathB-servlet:pathB / *

我有一个控制器,如:

public class MyController extends SimpleFormController {

   private MyService myService; 

}

两个服务实现:

public class MyService1 implements MyService {
}

public class MyService2 implements MyService {
}

在pathA-servlet中:

<bean name="/doSomeThing" class="MyController">
   <property name="myService" ref="myService"/>
</bean>

<bean id="myService" class="MyService1"/>

在pathB-servlet中:

<bean name="/doSomeThing" class="MyController">
   <property name="myService" ref="myService"/>
</bean>

<bean id="myService" class="MyService2"/>

现在,我正在尝试使用基于注释的控制器:@ Controller,@ RequestMapping。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

这是一个示例@Controller。这是一个休息端点,您可以使用

访问它
@Controller
@RequestMapping(method = RequestMethod.POST, value = "/my")
public class CopyOfMyController {

    @Autowired
    private MyService service;

    @RequestMapping(method = RequestMethod.POST, value = "/hib")
    public void haha(@ResponseBody RequestDTO dto) {
        service.doSomething(dto);
    }

}

你可以点击

Dto dto = new Dto();
dto.setPhone("12313");
RestTemplate restTemplate = new RestTemplate();
restTemplate.postForObject(new URI("http://localhost:8080/my/hib"), dto, Dto.class);

答案 1 :(得分:0)

这非常简单。在控制器中,首先添加@Controller注释。这个注释只是说这个类将是一个Spring控制器,它将能够根据控制器方法中定义的url映射来处理HTTP请求。

还为服务属性添加@Autowired注释。由于有MyService的2个实现,因此通过传递bean名称来添加@Qualifier,因为Spring无法选择要注入的bean。

所以你可以这样做:

 @Controller
 public class MyController {

     @Autowired
     @Qualifier("bean1") // This should be bean1
     private MyService myService1; 

     @Autowired
     @Qualifier("bean2")
     private MyService myService2;  

     @RequestMapping(value = "/doSomeThing1", method = RequestMethod.GET)
     public String doSomething(){
        return myService1.doSomething();
     }

     @RequestMapping(value = "/doSomeThing2", method = RequestMethod.GET)
     public String doSomething(){
        return myService2.doSomething();
     }
}