Spring Autowiring di class vs interfaccia?

Ho questa configurazione di spring:

 

La class TheClass implementa TheInterface . Quindi ho questo (ipotetico) codice Java:

 @Autowired TheInterface x; @Autowired TheClass y; 

L’autowiring di TheInterface funziona ma l’autowiring di TheClass fallisce. Spring mi dà una NoSuchBeanDefinitionException per la class.

Perché puoi colbind l’interfaccia e non la class?

Normalmente, entrambi funzioneranno, puoi rendere autowire interfacce o classi.

C’è probabilmente un generatore di autoprogetto da qualche parte nel tuo contesto, che sta avvolgendo il tuo boo bean in un object proxy generato. Questo object proxy implementerà TheInterface , ma non sarà un TheClass . Quando si utilizzano gli autoproxies, è necessario programmare l’interfaccia, non l’implementazione.

Il candidato più probabile sono i proxy transazionali: stai usando le transazioni Spring, usando AspectJ o @Transactional ?