2016-01-14 2 views
0

Я пытаюсь выполнить тест интеграции, а мой класс с аннотацией @Transactional не может быть автоматически добавлен в тестовый класс с NoSuchBeanDefinitionException. Я прокомментировал это и проверил список загруженных бобов, и моя служба там, просто не введена.@Transactional аннотированный класс не может быть autwired

org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем 'com.icsynergy.scim.service.DBIntegrationServiceTest': не удалось выполнить инъекцию зависимых от автозагрузки; Вложенное исключение - org.springframework.beans.factory.BeanCreationException: Не удалось autowire field: 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> 

EDIT: Обнаружено обходное решение. Поскольку моя служба реализует IntegrationService, поэтому ее внедрение фактически помогает избежать исключения. До сих пор не понимаю, что случилось с моей первоначальной инъекции

будет признателен за любые идеи, ТИА

ответ

1

вы бы лучше использовать интерфейс, но не конкретный класс, так что вы должны сделать свой код так:

@Autowired 
IntegrationService _service 

Если у вас нет интерфейса, вы должны его создать.

+0

Да, спасибо, @xierui, я понял, что –

Смежные вопросы