我正在嘗試執行集成測試,並且我的類使用@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
是的,謝謝你,@xierui,我覺得 –