亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring 為什么接口而不是抽象類?

Spring 為什么接口而不是抽象類?

慕桂英4014372 2023-04-13 16:46:46
有時,我們以某種自動方式使用 Spring。今天我在思考和搜索以下內容。為什么我們習慣在 Spring 中這樣做? @Autowired IAnimal 動物;為什么我們通常不做這樣的事情? @Autowired 動物;Animal 是一個抽象類,在我們的 beans.xml 中,或者使用帶有限定符的@Autowired,我們可以指定我們想要的實現。狗,貓等。我知道我錯了,但我想解釋一下抽象類方法而不是接口方法的缺點?,F在,如果我們想注入一些 ORM 實現,Ibatis 或 Hibernate,使用接口注入更有意義,因為兩個提供者不共享抽象類,但它們共享相同的接口。但是還有其他例子嗎?提前致謝!
查看完整描述

3 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

接口的主要優點是多重繼承。Java 不允許您擴展多個類,這是有合理原因的。一些語言允許這樣做(例如 C++ 和其他語言)并且它有用是有原因的,但 Java 不允許。

但是,您可以實現多個接口。關于什么是接口和什么是抽象類,還有一個更微妙的問題。

如果你有class MyClass extends MyAbstractClass,你實際上是在說“的所有實例MyClass都是”的實例MyAbstractClass。這適用于應用于 OOP 的最常見隱喻。例如,所有的狗實際上都是動物。

然而,接口只是定義了一些行為。在許多編程上下文中,通過事物的功能來定義事物比它們是什么更有意義。例如,狗是可吠叫的、可奔跑的、可行走的、可喂食的,等等……在這里您定義它可以做什么。

對于您的 Spring 示例,您可能并不關心您正在使用的對象實際上是一個 Animal,您可能只關心它可以做 Animals可以做的所有事情。這是首選接口的主要原因。


查看完整回答
反對 回復 2023-04-13
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

在早期的 Spring 版本中,聲明一個接口可能是強制性的,以使 bean 可以使用一些需要通過接口生成代理類的功能。
最近的 Spring 版本不再有此限制。所以現在,在 Spring 中(和沒有 Spring 一樣)一個共享的良好實踐是讓一個 bean 類僅在有意義的情況下實現一個接口:KISS(保持簡單和愚蠢)原則。
抽象是有代價的,我們只有在有充分理由的情況下才愿意接受它。

查看完整回答
反對 回復 2023-04-13
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

這真的取決于你的項目。

IAnimal如果您可能有此類接口的多個實現并且您將決定在打包過程中使用哪一個,則您希望使用接口 ( )。

例如,假設根據IAnimal您是在 Windows 還是 Linux 下實現需要不同,在打包過程中您可能希望準備兩個不同版本的應用程序(一個用于 Windows 和一個用于 Linux)并且每個包將僅包含適用于該平臺的代碼。在這種情況下,您將在一個包中包含 Windows 的實現,而在另一種情況下,您將包含 Linux 的實現。

另一種常見情況是團隊作為“黑匣子”工作,一個團隊需要另一個團隊的依賴。在那種情況下,團隊之間達成的所有協議都是實施的“契約”(即:接口)。您的團隊將能夠針對您構建的“模擬”實現進行工作,而另一個團隊開發最終將發布的實現。

否則,一般的建議是“保持簡單”,只有在證明需要時才添加接口。不這樣做會導致代碼過多,這只會讓每個人的生活都變得困難。


查看完整回答
反對 回復 2023-04-13
  • 3 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號