2014-12-02 26 views
0

我是基於註釋的控制器的新手。我有兩個小服務程序是這樣的:從不同的servlet向同一控制器注入不同的服務bean實現

pathA小服務程序的URL:pathA/* pathB小服務程序的URL:pathB/*

而且我有這樣一個控制器:

public class MyController extends SimpleFormController { 

    private MyService myService; 

}

和兩個服務實現:

public class MyService1 implements MyService { 
} 

public class MyService2 implements MyService { 
} 

而且在pathA-SERV讓:

<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。我怎樣才能做到這一點?

+0

爲什麼它會有什麼不同?只要確保在這兩個servlet中只有一個'MyService'的實例,並使用'@ Autowired'或者只是像現在那樣注入它。您使用'@ Controller'並不意味着您不能再使用xml配置。 – 2014-12-02 18:50:13

回答

0

這裏是一個示例@Controller。這是一個REST端點,可以用

@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); 
+0

我在問如何從兩個不同的servlet使用\ @Controller和\ @RequestMapping在同一個控制器中注入兩個不同的服務實現。這可以在SimpleFormController中完成,但我如何在基於註釋的Controller中執行此操作? @stackdev – user2234564 2014-12-02 17:10:53

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(); 
    } 
} 
相關問題