真正的问题是,为什么允许我通过以下两种方式编写此代码:
@Controller
public class PostController {
@Autowired
private PostService postService;
@Autowired
private CommentService commentService;
....
}
和
@Controller
public class PostController {
private PostService postService;
private CommentService commentService;
@Autowired
public PostController(PostService postService,CommentService commentService){
this.postService = postService;
this.commentService = commentService;
}
....
}
最佳答案
第一个解决方案通过反射直接注入值(基本上,JVM将获取您的对象并手动设置值).
第二种解决方案使用构造函数,这意味着该参数是必需的.另外,在将其自己分配给属性之前,您有时间使用所述值. (请注意,构造函数也将通过反射调用).
另一种方法是使用setter,这一次调用一个方法来设置值,这样您就可以在实际设置它之前对其进行操作,但这不是强制性的(因为它不是构造函数的一部分).
关于推荐的一个,我不确定实际上是否有一个“官方推荐的”,但是我倾向于只对强制字段使用构造函数注入而对非强制字段使用setter注入.但据我所知,这主要取决于您与之合作的团队或您的品味.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。