2016-09-14 51 views
0

讓Spring服務通過實現多個接口來分解它的功能是不好的做法,然後讓Spring使用只聲明需要的方法的接口注入一個Service實例?Spring服務實現多個接口:好還是壞?

像:

public interface OperationsService1 { 

    public void operation1(); 

    public void operation2(); 

} 


public interface OperationsService2 { 

    public void operation3(); 

    public void operation4(); 

} 

@Service 
public class OperationsServiceImpl implements OperationsService1, OperationsService2 { 

    public void operation1() {} 

    public void operation2() {} 

    public void operation3() {} 

    public void operation4() {} 

} 

,然後調用類:

@Autowire 
private OperationsService1 ops1; 

@Autowire 
private OperationsService2 ops2; 

回答

0

這更是一個比Spring的從我的觀點的問題設計的事看法。通常,一個類應該負責單個功能(請參閱SRP on wiki)。所以一個服務類應該實現一個服務接口。

0

然後讓Spring使用接口 注入Service實例,該接口在必要時只聲明所需的方法?

首先我覺得你很困惑。在你的例子中,每個接口都不會有一個實例。當你致電

@Autowire 
private OperationsService1 ops1; 

@Autowire 
private OperationsService2 ops2; 

他們都會指向相同的OperationsServiceImpl類,因爲這個bean默認是單例。你在這裏有一個實例和兩個指向它的接口。通過自動裝配接口,這意味着對於第一個接口,只能調用bean中的一些方法,第二個接口可以調用同一個bean的其他一些方法。

這是一個很好的做法嗎?

我不這麼認爲,通常情況下,人們會使用具有各種功能的多個對象實例的接口,這在上面沒有解釋過。如果其他類開始實現這些接口,並且必須使用@Qualifier來區分它們,它會變得更加混亂。如果你想要一個乾淨的解決方案將OperationsServiceImpl分成兩個獨立的類,並且每個類都實現相應的接口。爲新開發人員提供支持將不那麼複雜也容易。

+0

同樣爲了增加@喬治的觀點,它似乎也違反了單一責任原則。當你實現多態行爲時你可以接口。所以你應該將每個類與實現單個接口的2個類分開。這將使你的代碼變得乾淨。 –

+0

@george,我知道的第一部分,也許我沒有說清楚。我只是問是否通過不同的接口公開部分整個功能並根據需要使用它們是不好的做法。 –