これで私を助けてくれることを願っています。
Web アプリケーションで Spring MVC (3.1.1) を使用していますが、奇妙な状況に直面しています。ServicioUsuario サービスを利用するこの単純な @Controller があり、正常に動作します。
@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 が実装クラスではなくインターフェイスをインスタンス化しようとするのはなぜですか? それは私が間違っていることですか?