2017-04-07 88 views
1

我創建了由Maven管理的Spring Boot應用程序。 我正在從我們的Maven存儲庫中檢索公司的庫。自動裝配和注入Bean的外部Java庫問題

在這個庫中,我們有一個服務接口,而不是被標註了「@服務」:

public interface MyService { 
    //... 
} 

此服務只有一個執行:

public class DefaultMyService implements MyService { 
    //... 
} 

這個庫上下文管理的舊的Spring方法(在applicationContext.xml文件中)。 我讀到通常情況下,如果在範圍中只有一個,Spring Boot能夠找到實現。

當我嘗試運行「春天啓動:運行」在我的項目,它會失敗,出現以下錯誤:

無型「com.pharmagest.saml.SAMLService」 可用的排位豆:預計至少有1個豆符合自動電線 候選人的要求。依賴註解: {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}

我嘗試:

  1. 要添加@ComponentScan上的配置類,包括包錯誤:@ComponentScan(basePackages={"com.mycompany.web", "com.mycompany.thelibrary.client.*", "com.mycompany.thelibrary.services.*"})
  2. 要在applicationContext.xml中添加bean定義(如果我添加的接口它告訴我,它可以定義它,因此,我聽說春天可以找到默認的實現如果只有一個?)
  3. 在「運行」中添加庫時間」,在項目的選擇
  4. 爲了不通過行家

庫中添加外部資源在所有的情況下,我只可以Maven構建,但不能運行項目。 你有什麼建議可以幫助我嗎?謝謝!

+0

對於選項2,您可以在applicationContext.xml中顯示您的定義嗎? –

+0

難道你不能手動創建bean並將該方法標記爲@Bean來返回實例嗎? – StanislavL

回答

3
  1. 將無法​​正常工作的DefaultMyService沒有@Component(或@Service)註釋不會被檢測到。
  2. Bean定義必須是具體實例,所以使用DefaultMyService而不是接口。春天不會檢測到任何東西你的理解是錯誤的
  3. 和4.不會改變任何東西只會添加依賴沒有正確的1.或2.什麼都不會做。

只需添加一個@Bean到您的配置

@Bean 
public DefaultMyService myService() { 
    return new DefaultMyService(); 
} 

或導入其他庫applicatiponContext.xml這是你應該做的事情。

@ImportResource("classpath:/applicationContext.xml") 

將此添加到@SpringBootApplication旁邊。

+0

嗨,我做到了。我導入了applicationContext.xml文件:(我無法獲得庫的源代碼,我不得不使用它,所以我不能添加「@service」或@Bean – Alex

+0

爲什麼不能你可以添加'@ Bean',我可以把'@ ImportResource'添加到一個類中,你可以添加一個'@ Bean'到同一個類 –

+0

噢對不起我雖然你問我添加@豆服務本身我的不好 – Alex