2015-10-15 74 views
7

Java 8添加了一項新功能,通過該功能我們可以在接口中提供方法實現。 在Spring 4中有什麼方法可以在可以在方法體內部使用的接口中注入bean? 下面是示例代碼Java 8和Spring 4:在界面中使用自動裝配

public interface TestWiring{ 

@Autowired 
public Service service;// this is not possible as it would be static. 
//Is there any way I can inject any service bean which can be used inside testWiringMethod. 
default void testWiringMethod(){ 
    // Call method of service 
    service.testService(); 
} 
} 
+3

你不能實例化一個接口。你會如何在其中自動裝入一個字段? – Tunaki

+0

我想在我的方法體內使用spring管理的服務。一種方法是使用ApplicationContext.getbean(「)」方法,但我正在尋找Spring 4中的任何特性,我可以在接口中注入Spring管理的bean,接口將由一些bean實現,所以它應該可用於實現類默認情況下,因爲接口的成員是靜態最終的,所以我不能直接使用@autowiring –

+0

DI在Spring中可以通過在構造函數(構造函數注入)中設置依賴關係,或者通過屬性(setter注入)來工作。接口,你沒有構造函數,也沒有實例變量(你在界面聲明的變量是'static final'),所以沒有辦法注入任何東西。 – Ruben

回答

7

這是一個有點棘手,但它的工作原理,如果你需要的任何需求的接口內的依賴性。

這個想法是聲明一個方法,它將強制實現的類提供您想要自動裝配的依賴關係。

這種方法的壞處是,如果你想提供太多的依賴關係,代碼將不會很漂亮,因爲每個依賴關係都需要一個getter。

public interface TestWiring { 

    public Service getService(); 

    default void testWiringMethod(){ 
     getService().testService(); 
    } 

} 


public class TestClass implements TestWiring { 

    @Autowire private Service service; 

    @Override 
    public Service getService() { 
     return service; 
    } 

}