Ich habe kürzlich ein Projekt von Spring 4.3.1 auf 4.3.4 aktualisiert und was früher gut funktionierte, wird jetzt einfach nicht für mich funktionieren.Spring @Inject funktioniert nicht
Ich benutze JPA, die eine Reihe von Repository-Klassen gilt:
/**
* 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);
}
Wir auch Elasticsearch für die Suchmaschine verwenden, die eine Reihe von SearchRepositories wie folgt erstellt:
/**
* Spring Data ElasticSearch repository for the Publication entity.
*/
public interface DrugQualityCategorySearchRepository extends ElasticsearchRepository<Publication, Long> {
}
Einer Das Problem mit ES besteht darin, dass es seine Indizes regelmäßig aktualisieren muss. Daher haben wir einen Test erstellt, bei dem alle Repositories injiziert und aus dem JPA-Repository neu erstellt werden, wie bei der Injektion der Repos:
@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;
Und dann füllen wir die Instanzen ES:
drugQualityCategorySearchRepository.save(drugQualityCategoryRepository.findAll());
formulationSearchRepository.save(formulationRepository.findAll());
innDrugSearchRepository.save(innDrugRepository.findAll());
locationSearchRepository.save(locationRepository.findAll());
manufacturerSearchRepository.save(manufacturerRepository.findAll());
Nun ist die Frage, die ich habe ist, dass wenn ich versuche, den Test zu starten, erhalte ich die:
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()}
I habe hier einige Fragen wie this und this überprüft, hatte einen schnellen Blick auf die Spring-Dokumente, konnte aber nichts Relevantes finden
Ich habe natürlich versucht, all @Autowired
, @Component
und @Repository
-Tags in verschiedenen Orten, zu keinem positiven Ergebnis
Wie stellen Sie Ihren Kontext zum Testen ein? – Jan
Hallo Jan, ich bin mir nicht sicher, ich weiß, was Sie hier mit Kontext meinen, ich habe eine Config-XML-Datei, die die Verbindungsparameter für ES und JPA setzt, abgesehen davon, ich habe nur die Anmerkungen, die in den Code-Extrakten sind in der ursprünglichen Frage – Steven