Spring @Inject 不工作
Spring @Inject not working
我最近将一个项目从 Spring 4.3.1 升级到 4.3.4,以前工作正常,现在对我来说不工作了。
我使用 JPA,它拥有一系列存储库 类:
/**
* Spring Data JPA repository for the DrugQualityCategory entity.
*/
public interface DrugQualityCategoryRepository extends JpaRepository<DrugQualityCategory,Long> {
@Query(value = "Select a from DrugQualityCategory a where a.oldId = ?1")
DrugQualityCategory findOneByOldId(Integer oldId);
}
我们还使用 ElasticSearch 作为搜索引擎,它创建了一系列像这样的 SearchRepositories:
/**
* Spring Data ElasticSearch repository for the Publication entity.
*/
public interface DrugQualityCategorySearchRepository extends ElasticsearchRepository<Publication, Long> {
}
ES 的一个问题是它需要定期更新其索引,因此我们构建了一个测试,它注入所有存储库并从 JPA 存储库重建它们,当我们注入存储库时看起来像这样:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@Transactional
@ActiveProfiles("syncElasticsearch")
public class SyncMysqlElasticSearch {
private Logger logger = LoggerFactory.getLogger(getClass());
@Inject DrugQualityCategoryRepository drugQualityCategoryRepository;
@Inject TechniqueRepository techniqueRepository;
@Inject TradeDrugRepository tradeDrugRepository;
@Inject SurveyDataRepository surveyDataRepository;
@Inject RQAAQualityRepository rqaaQualityRepository;
然后我们填充ES实例:
drugQualityCategorySearchRepository.save(drugQualityCategoryRepository.findAll());
formulationSearchRepository.save(formulationRepository.findAll());
innDrugSearchRepository.save(innDrugRepository.findAll());
locationSearchRepository.save(locationRepository.findAll());
manufacturerSearchRepository.save(manufacturerRepository.findAll());
现在,我遇到的问题是,当我尝试开始测试时,我不断收到:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name [class name] Unsatisfied dependency expressed
through field [field name] nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [class name] available: expected at least
1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.inject.Inject()}
我在这里检查了几个问题,例如 this and this,快速浏览了 Spring 文档,但找不到任何相关内容
我显然已经在不同的地方尝试了所有 @Autowired
、@Component
和 @Repository
标签,但没有得到肯定的结果
您需要使用 @ContextConfiguration 注释来注释您的测试 class,该注释指向相关的 @Configuration class,它会扫描并注册您尝试注入的所有这些 bean。
请参阅@WebAppConfiguration 的 java 文档:
Note that @WebAppConfiguration must be used in conjunction with @ContextConfiguration, either within a single test class or within a test class hierarchy.
我最近将一个项目从 Spring 4.3.1 升级到 4.3.4,以前工作正常,现在对我来说不工作了。
我使用 JPA,它拥有一系列存储库 类:
/**
* Spring Data JPA repository for the DrugQualityCategory entity.
*/
public interface DrugQualityCategoryRepository extends JpaRepository<DrugQualityCategory,Long> {
@Query(value = "Select a from DrugQualityCategory a where a.oldId = ?1")
DrugQualityCategory findOneByOldId(Integer oldId);
}
我们还使用 ElasticSearch 作为搜索引擎,它创建了一系列像这样的 SearchRepositories:
/**
* Spring Data ElasticSearch repository for the Publication entity.
*/
public interface DrugQualityCategorySearchRepository extends ElasticsearchRepository<Publication, Long> {
}
ES 的一个问题是它需要定期更新其索引,因此我们构建了一个测试,它注入所有存储库并从 JPA 存储库重建它们,当我们注入存储库时看起来像这样:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@Transactional
@ActiveProfiles("syncElasticsearch")
public class SyncMysqlElasticSearch {
private Logger logger = LoggerFactory.getLogger(getClass());
@Inject DrugQualityCategoryRepository drugQualityCategoryRepository;
@Inject TechniqueRepository techniqueRepository;
@Inject TradeDrugRepository tradeDrugRepository;
@Inject SurveyDataRepository surveyDataRepository;
@Inject RQAAQualityRepository rqaaQualityRepository;
然后我们填充ES实例:
drugQualityCategorySearchRepository.save(drugQualityCategoryRepository.findAll());
formulationSearchRepository.save(formulationRepository.findAll());
innDrugSearchRepository.save(innDrugRepository.findAll());
locationSearchRepository.save(locationRepository.findAll());
manufacturerSearchRepository.save(manufacturerRepository.findAll());
现在,我遇到的问题是,当我尝试开始测试时,我不断收到:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name [class name] Unsatisfied dependency expressed
through field [field name] nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [class name] available: expected at least
1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.inject.Inject()}
我在这里检查了几个问题,例如 this and this,快速浏览了 Spring 文档,但找不到任何相关内容
我显然已经在不同的地方尝试了所有 @Autowired
、@Component
和 @Repository
标签,但没有得到肯定的结果
您需要使用 @ContextConfiguration 注释来注释您的测试 class,该注释指向相关的 @Configuration class,它会扫描并注册您尝试注入的所有这些 bean。
请参阅@WebAppConfiguration 的 java 文档:
Note that @WebAppConfiguration must be used in conjunction with @ContextConfiguration, either within a single test class or within a test class hierarchy.