For the most part I’m trying to code to interfaces as much as possible. But I’m having problems with a Spring Controller method signature. If I actually write the signature using the Model’s interface, I end up getting the following exception:
BeanInstantiationException: Could not instantiate bean class[PageModel]: Specified class is an interface
Granted, I know that it’s an interface, and if I change it to the actual implementation class, it works just fine. But is there no way to code to the interface? An annotation or something to tell Spring which bean to instantiate? btw, I’m using annotation configuration.
@RequestMapping("SpecificPageController")
public interface PageController {
@RequestMapping({"", "/load"})
ModelAndView load(@ModelAttribute("model") PageModel model);
}
@Controller
public class SpecificPageController implements PageController {
@Override
public ModelAndView load(final PageModel model) {
}
}
public interface PageModel {
... getters and setters...
}
public class ModelImpl implements PageModel {
... variables, getters, setters...
}
You can use
@ModelAttributeon a controller method to get the implementation: