Я пытаюсь выполнить тест интеграции, а мой класс с аннотацией @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, поэтому ее внедрение фактически помогает избежать исключения. До сих пор не понимаю, что случилось с моей первоначальной инъекции
будет признателен за любые идеи, ТИА
Да, спасибо, @xierui, я понял, что –