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 @SpringBootApplicationanotasi mereka . Anotasi ini mewakili @Configuration, @EnableAutoConfigurationdan @ComponentScansesuai dengan referensi pegas .
Seperti yang diharapkan, anotasi baru berfungsi dengan baik dan aplikasi saya berjalan dengan lancar tetapi, Intellij terus mengeluh tentang @Autowiredependensi yang tidak terpenuhi . Segera setelah saya berubah kembali untuk menggunakan @Configuration, @EnableAutoConfigurationdan @ComponentScansecara terpisah, kesalahan berhenti. Tampaknya Intellij 14.0.3 (dan kemungkinan besar, versi sebelumnya juga) belum dikonfigurasikan untuk mengenali @SpringBootApplicationanotasi.
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.
@SpringBootApplicationsaya menerima kesalahan ini. Saya mengikuti saran dari @ Jaos Matos dengan menggunakan scanBasePackagesparameter untuk @SpringBootApplicationdan menentukan paket / namespaces yang harus dipindai.
Tambahkan anotasi Spring di @Repositoryatas 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 Repositorykelas 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 @Componentatau @configurationdalam 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 + enterdengan mengambil kursor atas kesalahan dan di dalam submenu dari item pertama Anda akan menemukan Disable Inspectionpilih itu
Saya memiliki masalah serupa dalam aplikasi Spring Boot. Aplikasi ini menggunakan Feign (permintaan klien sintesis HTTP dari antarmuka beranotasi). Dengan antarmuka yang SomeClientdianotasi @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 SomeClientditemukan karena tidak ada kelas nyata yang benar-benar ada dalam proyek dan Ide tidak diajarkan untuk memahami @FeignClientanotasi dengan cara apa pun.
Solusi: antarmuka SomeClientdengan catatan @Component. (Dalam kasus kami, kami tidak menggunakan @FeignClientanotasi SomeClientsecara langsung, kami lebih suka menggunakan metaannotasi @OurProjectFeignClientyang dianotasi @FeignClientdan menambahkan @Componentanotasi agar berfungsi juga.)
@Componentantarmuka 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 @Componentdi versi yang lebih awal (di mana @FeignClientanotasi berada di org.springframework.cloud.netflix.feignbukannya org.springframework.cloud.openfeign- mungkin ini adalah penyebab masalah?). Sudahkah Anda menemukan rincian lebih lanjut (mungkin tiket bug) untuk ini?
@Component) berasal @FeignClientdari org.springframework.cloud.netflix.feign) paket.
Dan satu informasi penting terakhir - tambahkan ComponentScansehingga aplikasi tahu tentang hal-hal yang perlu disambungkan. Ini tidak relevan dalam kasus pertanyaan ini. Namun jika tidak @autowiringada 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.javapaket 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 @EnableAutoConfigurationdi kelas Aplikasi di bawah @SpringBootApplicationyang 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
Springdan tambahkan+ Application.java