Java 从不同的servlet在同一控制器中注入不同的服务bean实现
我不熟悉基于注释的控制器。我有两个类似的servlet: url:pathA的pathA servlet/* url:pathB的pathB servlet/* 我有一个控制器,比如:Java 从不同的servlet在同一控制器中注入不同的服务bean实现,java,spring,spring-mvc,Java,Spring,Spring Mvc,我不熟悉基于注释的控制器。我有两个类似的servlet: url:pathA的pathA servlet/* url:pathB的pathB servlet/* 我有一个控制器,比如: public class MyController extends SimpleFormController { private MyService myService; } 和两个服务实现: public class MyService1 implements MyService { } publ
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对基于注释的控制器执行同样的操作。我该怎么做 这是一个@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);
这很简单。在控制器中,首先添加@controller注释。这个注释简单地说,这个类将是一个Spring控制器,它能够根据控制器的方法中定义的url映射来处理HTTP请求 还为服务属性添加@Autowired注释。因为MyService有两个实现,所以通过传递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();
}
}
我在问如何使用\@controller和\@RequestMapping从两个不同的servlet在同一个控制器中注入两个不同的服务实现。这可以在SimpleFormController中实现,但在基于注释的控制器中如何实现呢@斯塔克德夫:有什么不同吗?只要确保两个servlet中都只有一个MyService实例,并使用@Autowired或像现在一样注入它。使用@Controller并不意味着不能再使用xml配置。