2016-10-08 89 views
1

我對整個彈簧依賴注入有點新。 有一兩件事,我不明白,希望有人能清除了我...彈簧依賴注入到具有構造函數的類

我有一個服務:

@Service 
public class Service {...} 

而另一個類:

public class A{ 
    @Autowired 
    private Service service; 
    ... 
} 

在這種情況下,服務將按預期注入A級。 據我所知,你不能在類A中使用構造函數,否則注入將無法工作。有沒有辦法在類A中使用構造函數並同時注入Service? 即:

public class A{ 
     @Autowired 
     private Service service; 

     private String a; 
     private int b; 
     public A(String a,int b){ 
     this.a = a; 
     this.b = b; 
     } 
    } 

在這種情況下,我得到的是服務是空的,反正上班了這一點? 我希望能夠使用注入到服務的「新」來創建類型A的對象,這有可能嗎?

感謝。

回答

1

有。您應該在Spring配置類中手動創建服務類的實例(使用@Configuration註釋),並使用@Service(而不是類)創建實例的方法進行註釋。

所以,作爲一個例子,你的應用程序可能有一個Spring配置,看起來像這樣:

@Configuration 
public class MyApplicationConfig { 
    @Bean 
    public Service myService() { 
     return new Service("hello", "world", 42); // ctor args as an example 
    } 
} 

而服務類:

// need fully qualified class because your class has the same name 
@org.springframework.stereotype.Service 
public class Service { 
    public Service(String prefix, String suffix, int number) { 
     // Whatever 
    } 
} 
+0

感謝您的快速回復,您有任何示例嗎?我不確定我完全明白你在說什麼...... –

0

最重要的一點是,無論你的班應該是春豆。

這意味着所有的實例化都將由Spring容器完成。要了解如何正確處理基於構造函數的依賴注射,檢查ref doc

此位如果whysoever,你不能讓一個類A一個Spring bean,比推薦的方法是用@Configurable將自動裝配依賴關係進行註解在創作時間。

請注意,爲此,您需要啓用方面。我做了一個快速搜索,發現這個似乎很好的解釋細節的blog