2016-01-14 45 views
0

我正在嘗試執行集成測試,並且我的類使用@Transactional註釋無法自動裝入具有NoSuchBeanDefinitionException的測試類。我評論了它,並檢查了加載的bean的列表,我的服務在那裏,只是沒有注入。@Transactional註釋類不能被自動裝配

org.springframework.beans.factory.BeanCreationException:創建名爲'com.icsynergy.scim.service.DBIntegrationServiceTest'的bean時出錯:注入自動裝配的依賴項失敗;嵌套異常是org.springframework.beans.factory.BeanCreationException:無法自動裝入字段:private com.icsynergy.scim.service.DBIntegrationService com.icsynergy.scim.service.DBIntegrationServiceTest._service;嵌套的異常是

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.icsynergy.scim.service.DBIntegrationService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 

如果我刪除此註釋,它被注入但沒有事務支持。

這裏是我的類

@Slf4j 
@Service(value = 'integrationService') 
@EnableConfigurationProperties(DBIntegrationConfig.class) 
//@Transactional 
class DBIntegrationService implements IntegrationService, HealthIndicator {... 

我嘗試注入它作爲

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
class DBIntegrationServiceTest { 

@Autowired 
DBIntegrationService _service 
... 

及以下Application.class

@Configuration 
@EnableAutoConfiguration 
@ComponentScan(basePackages = [ 
    "com.icsynergy.scim.repository", 
    'com.icsynergy.scim.service', 
    "com.icsynergy.scim.web", 
    "com.icsynergy.scim.config" 
], excludeFilters = [ 
    @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = OktaSCIMService.class), 
    @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = DBIntegrationService.class) 
]) 
@ImportResource("config.xml") 
@EnableTransactionManagement 
public class Application { 
.... 

,這是從config.xml的片段

<bean name="integrationService" class="com.icsynergy.scim.service.DBIntegrationService"/> 

<bean name="service" class="com.icsynergy.scim.service.OktaSCIMService"> 
    <property name="service" ref="integrationService"></property> 
    <property name="implementedUserManagementCapabilities"> 
     <list value-type="com.okta.scim.server.capabilities.UserManagementCapabilities"> 
      <value>GROUP_PUSH</value> 
     </list> 
    </property> 
</bean> 

編輯:找到了解決方法。由於我的服務實現了IntegrationService,因此注入它實際上有助於避免發生異常。還是不明白什麼是錯的我原來的注射

歡迎任何想法,TIA

回答

1

你最好的使用界面,但沒有具體的類,所以你應該讓你這樣的代碼:

@Autowired 
IntegrationService _service 

如果你沒有接口,你應該創建一個接口。

+0

是的,謝謝你,@xierui,我覺得 –