Dans mon ressort de démarrage 2.1 Application, j'ai une classe de service qui ressemble à ceci:
@Service
public class AImpl implements A {
@Autowired
B bservice;
}
Et puis le service autowired B ressemble à ceci:
@Service
public class BImpl implements B {
@Autowired(required = false)
@Lazy
org.springframework.web.client.RestOperations restTemplate;
}
Et dans ma classe de test:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {...})
@DataJpaTest
@EnableJpaRepositories("com.xxx")
@EntityScan("com.xxx")
public class CImplTest {
@Autowired
B bservice;
@Autowired
A aservice;
}
Lors de l'exécution de mes tests, je reçois le message d'erreur suivant:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.web.client.RestOperations' available: Optional dependency not present for lazy injection point
Cependant lors de l'exécution de l'application, je ne suis pas face à ce problème et il fonctionne très bien.
NOTE: J'ai essayé de remplacer le rstTemplate Autowiring avec Java 8 en option et il ne fonctionne pas bien.
Je ne sais pas si cela est la solution exacte à ce problème , mais quand essayé avec Java 8 optionnel type, cela ne fonctionne pas. Cependant, quand je suis passé au printemps ObjectProvider
, il fonctionne très bien. Idéalement, c'est juste une solution de contournement et non la cause de ce problème.