Ho creato un semplice test unitario ma IntelliJ lo evidenzia in modo errato in rosso. contrassegnandolo come errore
Niente fagioli?
Come puoi vedere sotto, supera il test? Quindi deve essere Autowired?
Ho creato un semplice test unitario ma IntelliJ lo evidenzia in modo errato in rosso. contrassegnandolo come errore
Niente fagioli?
Come puoi vedere sotto, supera il test? Quindi deve essere Autowired?
Risposte:
Ho avuto lo stesso problema durante la creazione di un'applicazione Spring Boot usando la loro @SpringBootApplication
annotazione. Questa annotazione rappresenta @Configuration
, @EnableAutoConfiguration
e @ComponentScan
secondo il riferimento molla .
Come previsto, la nuova annotazione ha funzionato correttamente e la mia applicazione ha funzionato senza intoppi, ma Intellij ha continuato a lamentarsi delle @Autowire
dipendenze non soddisfatte . Appena ho cambiato di nuovo ad usare @Configuration
, @EnableAutoConfiguration
e @ComponentScan
separatamente, gli errori cessarono. Sembra che Intellij 14.0.3 (e molto probabilmente anche le versioni precedenti) non sia ancora configurato per riconoscere l' @SpringBootApplication
annotazione.
Per ora, se gli errori ti disturbano così tanto, torna a quelle tre annotazioni separate. Altrimenti, ignora Intellij ... la risoluzione della tua dipendenza è configurata correttamente, dal momento che il test ha superato.
Ricordate sempre...
L'uomo è sempre più grande della macchina.
@SpringBootApplication
stavo ricevendo questo errore. Ho seguito il consiglio di @ Jaõs Matos usando il scanBasePackages
parametro @SpringBootApplication
e ho specificato il pacchetto / spazi dei nomi che dovrebbero essere scansionati.
Aggiungi l'annotazione Spring @Repository
sulla classe del repository.
So che dovrebbe funzionare senza questa annotazione. Ma se aggiungi questo, IntelliJ non mostrerà errori.
@Repository
public interface YourRepository ...
...
Se si utilizzano i dati di primavera con Repository
classe di estensione , saranno pagkages di conflitto. Quindi è necessario indicare pagkages espliciti.
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
E poi puoi autorizzare il tuo repository senza errori.
@Autowired
YourRepository yourRepository;
Probabilmente non è una buona soluzione (immagino che tu stia provando a registrare due volte il repositorio). Ma lavora per me e non mostrare errori.
Forse nella nuova versione di IntelliJ può essere risolto: https://youtrack.jetbrains.com/issue/IDEA-137023
La mia versione di IntelliJ IDEA Ultimate (2016.3.4 Build 163) sembra supportare questo. Il trucco è che devi aver abilitato il plug-in Spring Data.
A volte viene richiesto di indicare dove @ComponentScan deve cercare i componenti. Puoi farlo passando i pacchetti come parametro di questa annotazione, ad esempio:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
Tuttavia, come già accennato, l'annotazione @SpringBootApplication sostituisce @ComponentScan, quindi in questi casi è necessario fare lo stesso:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
Almeno nel mio caso, Intellij ha smesso di lamentarsi.
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
e sebbene l'app funzionasse bene, a Intellij non piaceva. Passando a @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
riparato per me!
Risolvo sempre questo problema facendo quanto segue. Impostazioni> Ispezioni> Nucleo a molla> Codice che passi dall'errore all'avvertimento dell'opzione di gravità
Sto usando spring-boot 2.0 e intellij 2018.1.1 ultimate edition e ho riscontrato lo stesso problema.
Ho risolto inserendo @EnableAutoConfiguration nella classe principale dell'applicazione
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯ \ _ (ツ) _ / ¯
Mettere @Component
o @configuration
nel file di configurazione del bean sembra funzionare, cioè qualcosa di simile a:
@Configuration
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
@Component
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
Se non vuoi apportare modifiche al tuo codice solo per rendere felice il tuo IDE. L'ho risolto aggiungendo tutti i componenti alla faccetta Spring.
Fintanto che i test passano, sei a posto, colpisci alt + enter
portando il cursore sopra l'errore e all'interno del sottomenu del primo oggetto troverai Disable Inspection
che seleziona
Ho avuto un problema simile nell'applicazione Spring Boot. L'applicazione utilizza Feign (client HTTP che sintetizza richieste da interfacce annotate). Dopo aver SomeClient
annotato l' interfaccia con @FeignClient
, Feign genera una classe proxy di runtime implementando questa interfaccia. Quando un componente Spring tenta di autowire il bean di tipo SomeClient
, Idea si lamenta di non aver SomeClient
trovato un bean di tipo poiché non esiste alcuna classe reale nel progetto e a Idea non viene insegnato a capire@FeignClient
annotazione in alcun modo.
Soluzione: annotare l'interfaccia SomeClient
con @Component
. (Nel nostro caso, non usiamo l' @FeignClient
annotazione suSomeClient
direttamente , piuttosto usiamo la metaannotazione @OurProjectFeignClient
che è annotata @FeignClient
e anche l'aggiunta di @Component
annotazioni funziona).
@Component
all'interfaccia risolve il problema. Ma penso che questo non sia il modo corretto ... Secondo me questo è un bug in IntelliJ IDEA o, per essere non così difficile, IntelliJ IDEA non è pronto per le nuove versioni di Feign. Funziona senza @Component
versioni più false (dove si trovava l' @FeignClient
annotazione org.springframework.cloud.netflix.feign
anziché org.springframework.cloud.openfeign
- forse questa è la causa del problema?). Hai trovato ulteriori dettagli (forse un bug ticket) per questo?
@Component
) @FeignClient
proviene da org.springframework.cloud.netflix.feign
) pacchetto.
E un'ultima informazione importante: aggiungi ComponentScan
l'app in modo che l'app sia a conoscenza delle cose che deve collegare. Questo non è rilevante nel caso di questa domanda. Tuttavia, se non @autowiring
viene eseguito affatto, questa è probabilmente la soluzione.
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
Quello che devi fare è aggiungere
@ComponentScan("package/include/your/annotation/component")
in AppConfiguration.java
.
Dal momento che penso che il tuo AppConfiguraion.java
pacchetto sia più profondo del tuo componente di annotazione (@Service, @Component ...),
come "package/include/your/annotation/component/deeper/config"
.
Ho avuto un problema simile nella mia domanda. Quando ho aggiunto le annotazioni, l'highlight non corretto è scomparso.
@ContextConfiguration(classes = {...})
Sto usando questa annotazione per nascondere questo errore quando appare in IntelliJ v.14:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Per me la soluzione era quella di collocare @EnableAutoConfiguration
nella classe Application sotto la @SpringBootApplication
sua intenzione di sottolinearla perché ridondante. Eliminalo e voilà tutti i tuoi avvertimenti sui fagioli mancanti sono scomparsi! Silly Spring ...
La mia soluzione a questo problema nella mia applicazione di avvio di primavera era aprire il contesto dell'applicazione di primavera e aggiungere manualmente la classe per il bean autowired mancante!
(accesso tramite il menu Struttura del progetto o la finestra degli strumenti a molla ... modifica "Contesto dell'applicazione primavera")
Quindi, invece di SpringApplicationContext, contenente solo la mia configurazione di primavera di ExampleApplication, contiene anche il bean mancante:
SpringApplicationContext:
et voilà: il messaggio di errore è scomparso!
Questo sembra essere ancora un bug nell'ultimo IntelliJ e ha a che fare con un possibile problema di memorizzazione nella cache?
Se aggiungi l'annotazione @Repository come mk321 menzionata sopra, salva, quindi rimuovi l'annotazione e salva di nuovo, questo risolve il problema.
Ho dovuto usare @EnableAutoConfiguration per risolverlo, tuttavia questo errore non ha avuto alcun impatto funzionale.
Può essere risolto posizionando @EnableAutoConfiguration sulla classe principale dell'applicazione Spring Boot.
A volte, nel mio caso, il motivo è un'importazione sbagliata. Ho importato per errore
import org.jvnet.hk2.annotations.Service
invece di
import org.springframework.stereotype.Service
accettando ciecamente la prima scelta nelle importazioni suggerite da Idea. Mi ci sono voluti alcuni minuti la prima volta che è successo :-)
Sorprendentemente, un progetto orientato a Feign che ha funzionato con successo con Eclipse non ha potuto essere eseguito in InteliJ. All'avvio dell'applicazione, InteliJ si è lamentato del client Feign che ho cercato di iniettare nel livello serviceImpl dicendo: field personRestClient (il mio client Feign) in ... richiedeva un bean di tipo ... che non è stato possibile trovare. Prendi in considerazione la definizione di un bean di tipo "...." nella tua configurazione.
Ho perso molto tempo cercando di capire cosa c'è che non va. Ho trovato una soluzione (per InteliJ) che non capisco completamente:
O scegli Eclipse :)
Utilizzare @AutoConfigureMockMvc per la classe di test.
semplice devi fare 2 passaggi
==>> change @Autowired to @Resource
IntelliJ IDEA Ultimate
Aggiungi la tua classe principale al contesto dell'applicazione IntelliJ Spring, ad esempio Application.java
File
-> Project Structure..
lato sinistro: Impostazioni progetto -> Moduli
lato destro: trova nella struttura del pacchetto
Spring
e aggiungi+
Application.java