J'ai un contrôleur de ressort qui utilise des annotations. J'ai donné à ce contrôleur un constructeur qui prend deux arguments. Je veux les deux façons d'initialiser le contrôleur: l'injection du constructeur et l'injection du setter.Un contrôleur annoté par ressort nécessite-t-il nécessairement un constructeur par défaut?
@Controller("viewQuestionController")
@RequestMapping("/public/viewQuestions")
public class ViewQuestionController
{
@Resource(name="questionService")
private QuestionService questionService;
/*public ViewQuestionController()
{
int i=0;
i++;
}
*/
public ViewQuestionController(@Qualifier("questionService") QuestionService questionService)
{
this.questionService = questionService;
}
@Resource(name="questionService")
public void setQuestionService(QuestionService questionService)
{
this.questionService = questionService;
}
}
Lorsque je décommente le constructeur par défaut, le contrôleur est initialisé correctement. Cependant, si je ne le fais pas, j'obtiens une exception BeanInstantiationException, aucun constructeur par défaut trouvé; L'exception imbriquée est java.lang.NoSuchMethodException. Donc, ma configuration pour le constructeur annoté est-elle incorrecte ou est-ce qu'un contrôleur complètement annoté au printemps a toujours besoin d'un constructeur par défaut?
Merci, la première possibilité d'utiliser @Autowired a travaillé. Je n'ai pas essayé @Inject, parce que cela nécessite de mettre un autre pot dans l'application. Je pense que je vais regarder l'injection de setter avec @Resource plus tard. –