2013-05-15 61 views
2

我在Spring上下文文件「的applicationContext.xml」定義的bean像下面工作豆如下:@Autowired不與應用程序上下文文件中定義豆

@Component("serviceImpl") 
public class ServiceImpl{ 
     // other code here 

     @Autowired 
     private transient DAOImpl daoBean; 

     // other code here 
    } 

我的服務類正在從我的JUnit測試類訪問。

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "/applicationContext.xml" }) 
public class JUnitTest{ 
    // other code here 

    @Autowired 
    private transient ServiceImpl serviceImpl; 

    // test cases are here 
} 

當我執行測試用例,它提供了錯誤說:

錯誤創建名爲「ServiceImpl」豆:自動裝配Autowired依賴注入失敗;嵌套的例外是org.springframework.beans.factory.BeanCreationException:無法自動裝配領域:私人短暫com.xxx.DAOImpl

當我從服務類中刪除@Autowired和使用@Resource(name =「daoBean」)測試案例工作正常。

public class ServiceImpl{ 
      // other code here 

      @Resource(name = "daoBean") 
      private transient DAOImpl daoBean; 

      // other code here 
     } 

我的問題是爲什麼@Autowired在這種情況下不工作?我是否需要使用@Autowired配置其他任何東西,以便它可以正常工作。我不想更改我的服務層類以將@Autowired替換爲@Resource。

回答

3

Mockito.mock()有一個通用返回類型T在運行時擦除,因此Spring無法推斷在Spring上下文中簡單註冊爲Object的創建模擬類型。這就是爲什麼@Autowired不起作用(因爲它試圖通過它的類型來查找依賴項)。

檢查出this answer以解決問題。

+0

感謝您給出答案。現在我懂了。 –

相關問題