spring之Spring 注释 Controller 是否一定需要默认构造函数

mate10pro 阅读:12 2024-11-24 20:56:43 评论:0

我有一个使用注解的 Spring Controller 。我给了这个 Controller 一个带有两个参数的构造函数。我想要两种初始化 Controller 的方法:构造函数注入(inject)和 setter 注入(inject)。

@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; 
} 
}    

当我取消对默认构造函数的注释时, Controller 会正确启动。但是,如果我不这样做,我会得到一个 BeanInstantiationException,找不到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException。 那么,我对带注释的构造函数的配置是错误的还是在 spring 中完全带注释的 Controller 总是需要默认构造函数?

请您参考如下方法:

如果要通过注解配置构造函数注入(inject),需要在构造函数上打上相应的注解。我不确定如何使用 @Resource 完成它,但是 @Autowired@Inject 支持它:

@Autowired 
public ViewQuestionController(@Qualifier("questionService") QuestionService questionService)  

@Inject 
public ViewQuestionController(@Named("questionService") QuestionService questionService)  


标签:Spring
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号