介面和實現的命名方式
阿新 • • 發佈:2019-01-10
在看別人的spring專案的時候,發現所有的service都是一個介面和一個或者多個實現,如果說有多個實現定義一個介面,也說得過去,只有一個介面,為什麼要定義成介面呢?
介面(interface)和實現(Implementation)是java多型的一個實現方式,一個介面可以有多個實現,一個實現類可以實現多個介面,這個概念就不具體講了。
仔細想想,service是什麼,翻譯過來是服務的意思,既然是服務,只需要讓使用者知道服務的定義就好,沒有必要把實現暴露出來,這點可以解釋為什麼即使只有一個實現也要寫成介面的形式。
另外一個原因,就是spring的裝配順序,查詢一個bean時優先類名、bean名稱,所以宣告注入的service時,只需要宣告介面名稱,示例名稱只要按照實現的service預設的,spring會自動查詢到對應的實現Bean.
所以基於以上的原則,寫一個service類時,要先定義一個介面,再實現這個介面,注入bean時,只要注入介面介面,例如:
介面:
public interface IFly {
void fly();
}
實現:
@Service
public class FlyImpl implements IFly{
@Override
public void fly() {
System.out.println("就是這樣飛");
}
}
注入bean:
@Autowired
private IFly flyImpl;