Saya telah membuat unit test sederhana tetapi IntelliJ salah menyorotnya merah. menandainya sebagai kesalahan
Tidak kacang?
Seperti yang Anda lihat di bawah, ia lulus tes? Jadi harus Autowired?
Saya telah membuat unit test sederhana tetapi IntelliJ salah menyorotnya merah. menandainya sebagai kesalahan
Tidak kacang?
Seperti yang Anda lihat di bawah, ia lulus tes? Jadi harus Autowired?
Jawaban:
Saya memiliki masalah yang sama ketika membuat aplikasi Boot Spring menggunakan @SpringBootApplication
anotasi mereka . Anotasi ini mewakili @Configuration
, @EnableAutoConfiguration
dan @ComponentScan
sesuai dengan referensi pegas .
Seperti yang diharapkan, anotasi baru berfungsi dengan baik dan aplikasi saya berjalan dengan lancar tetapi, Intellij terus mengeluh tentang @Autowire
dependensi yang tidak terpenuhi . Segera setelah saya berubah kembali untuk menggunakan @Configuration
, @EnableAutoConfiguration
dan @ComponentScan
secara terpisah, kesalahan berhenti. Tampaknya Intellij 14.0.3 (dan kemungkinan besar, versi sebelumnya juga) belum dikonfigurasikan untuk mengenali @SpringBootApplication
anotasi.
Untuk saat ini, jika kesalahannya sangat mengganggu Anda, maka kembalilah ke ketiga anotasi yang terpisah. Jika tidak, abaikan Intellij ... resolusi dependensi Anda telah dikonfigurasikan dengan benar, karena pengujian Anda berlalu.
Selalu ingat...
Manusia selalu lebih besar dari mesin.
@SpringBootApplication
saya menerima kesalahan ini. Saya mengikuti saran dari @ Jaos Matos dengan menggunakan scanBasePackages
parameter untuk @SpringBootApplication
dan menentukan paket / namespaces yang harus dipindai.
Tambahkan anotasi Spring di @Repository
atas kelas repositori.
Saya tahu ini akan berfungsi tanpa anotasi ini. Tetapi jika Anda menambahkan ini, IntelliJ tidak akan menampilkan kesalahan.
@Repository
public interface YourRepository ...
...
Jika Anda menggunakan Spring Data dengan Repository
kelas ekstensi, itu akan menjadi halaman konflik. Maka Anda harus menunjukkan halaman kejelasan.
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
Dan selanjutnya Anda dapat secara otomatis menyimpan repositori Anda tanpa kesalahan.
@Autowired
YourRepository yourRepository;
Ini mungkin bukan solusi yang baik (saya kira Anda mencoba mendaftar repositorium dua kali). Tetapi bekerja untuk saya dan jangan menunjukkan kesalahan.
Mungkin di versi baru IntelliJ dapat diperbaiki: https://youtrack.jetbrains.com/issue/IDEA-137023
Versi IntelliJ IDEA Ultimate (2016.3.4 Build 163) saya tampaknya mendukung hal ini. Caranya adalah Anda harus mengaktifkan plugin Spring Data.
Terkadang Anda diminta untuk menunjukkan di mana @ComponentScan harus memindai komponen. Anda dapat melakukannya dengan mengirimkan paket sebagai parameter anotasi ini, misalnya:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
Namun, seperti yang telah disebutkan, anotasi @SpringBootApplication menggantikan @ComponentScan, maka dalam hal ini Anda harus melakukan hal yang sama:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
Setidaknya dalam kasus saya, Intellij berhenti mengeluh.
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
dan meskipun aplikasi bekerja dengan baik, intellij tidak menyukainya. Mengubah untuk @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
diperbaiki untuk saya!
Saya selalu menyelesaikan masalah ini dengan melakukan hal berikut .. Pengaturan> Inspeksi> Pegas Inti> Kode daripada Anda beralih dari kesalahan ke peringatan opsi tingkat permasalahan
Saya menggunakan spring-boot 2.0, dan intellij 2018.1.1 edisi pamungkas dan saya menghadapi masalah yang sama.
Saya dipecahkan dengan menempatkan @EnableAutoConfiguration di kelas aplikasi utama
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯ \ _ (ツ) _ / ¯
Menempatkan @Component
atau @configuration
dalam file konfigurasi kacang Anda tampaknya berfungsi, yaitu sesuatu seperti:
@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");
}
}
Jika Anda tidak ingin membuat perubahan pada kode Anda hanya untuk membuat IDE Anda senang. Saya telah menyelesaikannya dengan menambahkan semua komponen ke aspek Spring.
Selama tes Anda melewati Anda baik, tekan alt + enter
dengan mengambil kursor atas kesalahan dan di dalam submenu dari item pertama Anda akan menemukan Disable Inspection
pilih itu
Saya memiliki masalah serupa dalam aplikasi Spring Boot. Aplikasi ini menggunakan Feign (permintaan klien sintesis HTTP dari antarmuka beranotasi). Dengan antarmuka yang SomeClient
dianotasi @FeignClient
, Feign menghasilkan kelas proxy runtime yang mengimplementasikan antarmuka ini. Ketika beberapa komponen Pegas mencoba untuk mengotomatiskan jenis kacang SomeClient
, Ide tidak mengeluh kacang jenis yang SomeClient
ditemukan karena tidak ada kelas nyata yang benar-benar ada dalam proyek dan Ide tidak diajarkan untuk memahami @FeignClient
anotasi dengan cara apa pun.
Solusi: antarmuka SomeClient
dengan catatan @Component
. (Dalam kasus kami, kami tidak menggunakan @FeignClient
anotasi SomeClient
secara langsung, kami lebih suka menggunakan metaannotasi @OurProjectFeignClient
yang dianotasi @FeignClient
dan menambahkan @Component
anotasi agar berfungsi juga.)
@Component
antarmuka menyelesaikan masalah. Tapi saya pikir ini bukan cara yang benar ... Menurut saya ini adalah bug di IntelliJ IDEA atau tidak terlalu sulit IntelliJ IDEA tidak siap untuk versi Feign yang lebih baru. Ia bekerja tanpa @Component
di versi yang lebih awal (di mana @FeignClient
anotasi berada di org.springframework.cloud.netflix.feign
bukannya org.springframework.cloud.openfeign
- mungkin ini adalah penyebab masalah?). Sudahkah Anda menemukan rincian lebih lanjut (mungkin tiket bug) untuk ini?
@Component
) berasal @FeignClient
dari org.springframework.cloud.netflix.feign
) paket.
Dan satu informasi penting terakhir - tambahkan ComponentScan
sehingga aplikasi tahu tentang hal-hal yang perlu disambungkan. Ini tidak relevan dalam kasus pertanyaan ini. Namun jika tidak @autowiring
ada yang dilakukan sama sekali maka ini kemungkinan solusi Anda.
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
Yang perlu Anda lakukan adalah menambahkan
@ComponentScan("package/include/your/annotation/component")
di AppConfiguration.java
.
Karena saya pikir AppConfiguraion.java
paket Anda lebih dalam dari komponen anotasi Anda (@Service, @Component ...),
seperti "package/include/your/annotation/component/deeper/config"
.
Saya memiliki masalah serupa dalam aplikasi saya. Ketika saya menambahkan anotasi, salah memilih highliting menghilang.
@ContextConfiguration(classes = {...})
Saya menggunakan anotasi ini untuk menyembunyikan kesalahan ini ketika muncul di IntelliJ v.14:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Bagi saya solusinya adalah menempatkan @EnableAutoConfiguration
di kelas Aplikasi di bawah @SpringBootApplication
yang akan menggarisbawahi karena itu berlebihan. Hapus dan voila semua peringatan Anda tentang kacang yang hilang lenyap! Musim Semi konyol ...
Solusi saya untuk masalah ini dalam aplikasi booting pegas saya adalah membuka konteks aplikasi pegas dan menambahkan kelas untuk kacang autowired yang hilang secara manual!
(akses melalui menu Struktur Proyek atau jendela pegas alat ... sunting "Konteks Aplikasi Pegas")
Jadi alih-alih SpringApplicationContext hanya berisi konfigurasi pegas ExampleApplication saya, ia juga mengandung Bean yang hilang:
SpringApplicationContext:
et voilà: Pesan kesalahannya hilang!
Ini sepertinya masih menjadi bug di IntelliJ terbaru dan ada hubungannya dengan kemungkinan masalah caching?
Jika Anda menambahkan anotasi @Repositori seperti mk321 yang disebutkan di atas, simpan, lalu hapus anotasi dan simpan lagi, ini memperbaiki masalah.
Saya hanya perlu menggunakan @EnableAutoConfiguration untuk mengatasinya, namun kesalahan ini tidak memiliki dampak fungsional.
Ini dapat diatasi dengan menempatkan @EnableAutoConfiguration pada kelas utama aplikasi boot spring.
Terkadang - dalam kasus saya yaitu - alasannya adalah impor yang salah. Saya tidak sengaja mengimpor
import org.jvnet.hk2.annotations.Service
dari pada
import org.springframework.stereotype.Service
dengan secara membabi buta menerima pilihan pertama dalam impor yang disarankan Idea. Butuh waktu beberapa menit saat pertama kali terjadi :-)
Anehnya, proyek berorientasi A Feign yang berhasil dijalankan dengan Eclipse tidak dapat berjalan di InteliJ. Ketika memulai aplikasi, InteliJ mengeluh tentang klien Feign yang saya coba untuk menyuntikkan ke lapisan serviceImpl yang mengatakan: field personRestClient (klien Feign saya) di ... diperlukan kacang jenis ... yang tidak dapat ditemukan. Pertimbangkan mendefinisikan jenis kacang '....' di konfigurasi Anda.
Saya membuang waktu lama untuk mencoba memahami apa yang salah. Saya menemukan solusi (untuk InteliJ) yang saya tidak sepenuhnya mengerti:
Atau pilih Eclipse :)
Gunakan @AutoConfigureMockMvc untuk kelas uji.
sederhana kamu harus melakukan 2 langkah
==>> change @Autowired to @Resource
IntelliJ IDEA Ultimate
Tambahkan kelas utama Anda ke IntelliJ Spring Application Context, misalnya Application.java
File
-> Project Structure..
sisi kiri: Pengaturan Proyek -> Modul
sisi kanan: temukan di struktur paket Anda
Spring
dan tambahkan+
Application.java