我希望你能帮我解决这个问题。
我在我的 web 应用程序中使用 Spring MVC (3.1.1),并且面临一个奇怪的情况。我有这个简单的@Controller,它利用了 ServicioUsuario 服务,并且工作正常:
@Controller
@RequestMapping("/ajax")
public class ControladorAjax extends ControladorGenerico {
@Autowired
ServicioUsuario servicioUsuario;
@RequestMapping("/check")
public ResponseEntity<String> check(@RequestParam String email) {
// Declarations and other operations omitted...
// Use servicioUsuario
servicioUsuario.doStuff();
return response;
}
}
但是,如果我删除了@Autowiring,并尝试将 Spring 注入servicioUsuario
作为参数(即通过将方法签名更改为:),public ResponseEntity<String> check(@RequestParam String email, ServicioUsuario servicioUsuario)
整个事情就会中断,并且我在 Tomcat 的日志中得到了这种异常:
javax.servlet.ServletException: NestedServletException in java.lang.Thread.getStackTrace:: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.package.ServicioUsuario]: Specified class is an interface
我有这些接口:
com.package
|-> Servicio.java (interface)
|-> ServicioUsuario.java (interface that extends Servicio)
和这些类:
com.package.impl
|-> ServicioImpl.java (implements Servicio)
|-> ServicioUsuarioImpl.java (@Service("servicioUsuario") that extends ServicioImpl implements ServicioUsuario)
并配置 Spring 以扫描两个包:
<context:component-scan base-package="com.package
com.package.impl" />
为什么 Spring 试图实例化接口而不是实现类?是我做错了什么吗?