所以我知道依赖性反转代表了坚实的设计原则中的d,我以前用springboot编写过一个web应用程序,我想知道这个代码示例是否显示了依赖性反转原则的一个很好的示例,是否有助于我正确理解这个概念。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
/**
* Provides a set of methods for serving and handling Interview data.
*/
@Controller
@SessionAttributes(names = {"users"})
public class InterviewController {
private final InterviewAuditor interviewAuditor;
private final AthleteAuditor athleteAuditor;
/**
* Injects all the needed auditors to talk to the database.
*
* @param interviewAuditor - the interview Auditor.
* @param athleteAuditor - the athlete Auditor.
*/
@Autowired
public InterviewController(InterviewAuditor interviewAuditor, AthleteAuditor athleteAuditor) {
this.interviewAuditor = interviewAuditor;
this.athleteAuditor = athleteAuditor;
}
谢谢!
2条答案
按热度按时间zpqajqem1#
对。依赖注入,在本例中是构造函数注入,是依赖反转的一个很好的例子,也是控制反转的一个很好的例子。这些概念都可以用层次结构来描述。
使用像spring这样的di容器可能是实现依赖性反转的最简单也是最常见的方法。注意,如果
InterviewController
只有一个构造函数,您甚至不需要将其注解为@Autowired
. Spring Boot仍然知道该怎么做。camsedfj2#
你的代码很好,但是你可以删除@autowired。从Spring4.2开始,在构造函数中使用依赖项注入时,没有必要这样做。
我不知道interviewauditor和athleteauditor是否是接口,但注入接口(当然,如果存在的话)以具有灵活性是一个很好的做法。因此,可以使用不同的依赖关系(不同的实现)重用同一个类。
顺便说一句,将di与构造函数一起使用是一种很好的做法,而不是像您那样使用属性。