Basit bir birim testi oluşturdum, ancak IntelliJ yanlış kırmızı renkte vurgulanıyor. hata olarak işaretleme
Fasulye yok mu?

Aşağıda görebileceğiniz gibi testi geçiyor mu? Bu yüzden AutoWired olmalı?

Basit bir birim testi oluşturdum, ancak IntelliJ yanlış kırmızı renkte vurgulanıyor. hata olarak işaretleme
Fasulye yok mu?

Aşağıda görebileceğiniz gibi testi geçiyor mu? Bu yüzden AutoWired olmalı?

Yanıtlar:
Ek açıklamalarını kullanarak bir Spring Boot uygulaması oluştururken de aynı sorunu yaşadım @SpringBootApplication. Bu açıklama gösterir @Configuration, @EnableAutoConfigurationve @ComponentScanuygun yay referans .
Beklendiği gibi, yeni ek açıklama düzgün bir şekilde çalıştı ve uygulamam sorunsuz bir şekilde çalıştı, ancak Intellij , yerine getirilmeyen @Autowirebağımlılıklar hakkında şikayet etmeye devam etti . En kısa zamanda kullanmaya geri değiştikçe @Configuration, @EnableAutoConfigurationve @ComponentScanayrı ayrı, hatalar durdurdu. Görünüşe göre Intellij 14.0.3 (ve büyük olasılıkla önceki sürümler de) @SpringBootApplicationek açıklamayı tanıyacak şekilde yapılandırılmamış .
Şimdilik, hatalar sizi çok rahatsız ediyorsa, bu üç ayrı ek açıklamaya geri dönün. Aksi takdirde Intellij'i yok sayın ... testiniz geçtiği için bağımlılık çözünürlüğünüz doğru yapılandırılmış.
Her zaman hatırla...
İnsan her zaman makineden daha büyüktür.
@SpringBootApplicationbu hatayı alıyordum. @ Jaõs Matos'ın tavsiyelerini takip ederek scanBasePackagesparametresini kullanarak taradım @SpringBootApplicationve taranması gereken paketi / ad alanlarını belirledim.
@RepositoryDepo sınıfının üzerine Bahar ek açıklaması ekleyin .
Bu açıklama olmadan çalışması gerektiğini biliyorum. Ancak bunu eklerseniz IntelliJ hata göstermez.
@Repository
public interface YourRepository ...
...
Spring Data Repositorysınıfını genişleterek kullanırsanız , bu sayfa çakışmaları olur. O zaman açıklık sayfalarını belirtmelisiniz.
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
Ve sonra deponuzu hatasız olarak otomatik olarak bağlayabilirsiniz.
@Autowired
YourRepository yourRepository;
Muhtemelen iyi bir çözüm değildir (sanırım iki kez depo kaydetmeye çalışıyorsunuz). Ama benim için çalış ve hata gösterme.
Belki IntelliJ'in yeni sürümünde düzeltilebilir: https://youtrack.jetbrains.com/issue/IDEA-137023
IntelliJ IDEA Ultimate (2016.3.4 Build 163) sürümüm bunu destekliyor gibi görünüyor. İşin püf noktası, Spring Data eklentisini etkinleştirmeniz gerektiğidir.
Bazen @ComponentScan'ın bileşenleri nerede taraması gerektiğini belirtmeniz gerekir. Bunu, paketleri bu ek açıklamanın parametresi olarak ileterek yapabilirsiniz, örneğin:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
Ancak, daha önce de belirtildiği gibi, @SpringBootApplication ek açıklaması @ComponentScan'ın yerini alır, bu nedenle bu gibi durumlarda aynı şeyi yapmanız gerekir:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
En azından benim durumumda Intellij şikayet etmeyi bıraktı.
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"}) ve uygulama iyi çalıştı, ancak intellij beğenmedi. @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})Benim için düzeltildi!
Bu sorunu her zaman aşağıdakileri yaparak çözerim. Ayarlar> Denetimler> Yay Çekirdeği> Kod , hatadan ciddiyet seçeneğini uyarmaktan daha fazla
Spring-boot 2.0 kullanıyorum ve intellij 2018.1.1 nihai sürümü ve aynı sorunla karşılaştım.
Ana uygulama sınıfında @EnableAutoConfiguration yerleştirerek çözdüm
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration ¯ \ _ (ツ) _ / ¯
Bean config dosyanıza koymak @Componentveya @configurationçalışmak gibi görünüyor, yani:
@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");
}
}
IDE'nizi mutlu etmek için kodunuzda herhangi bir değişiklik yapmak istemiyorsanız. Tüm bileşenleri Spring modeline ekleyerek çözdüm.
Eğer iyi geçiyoruz uzun Testlerinizin olarak itibarıyla isabet alt + enterhata imleci alarak ve bulacağınız ilk öğenin alt menü içinden Disable Inspectiono seçmek
Spring Boot uygulamasında da benzer bir sorun yaşadım. Uygulama Feign (açıklamalı arayüzlerden gelen HTTP istemcisi sentezleme istekleri) kullanır. Arabirime SomeClientek açıklama eklenmiş olan @FeignClientFeign, bu arabirimi uygulayan çalışma zamanı proxy sınıfı oluşturur. Bazı Spring bileşenleri tipte fasulyeyi otomatik bağlamaya çalıştığında SomeClient, Fikir SomeClient, projede gerçek bir sınıf bulunmadığından ve Fikir'in anlaşılması öğretilmediğinden, hiçbir tür fasulye bulunmadığından şikayet eder.@FeignClient ek açıklamaları herhangi bir şekilde .
Çözüm: Not Ekle arayüzü SomeClientile @Component. (Bizim durumumuzda, doğrudan @FeignClientek açıklama SomeClientkullanmıyoruz @OurProjectFeignClient, ek açıklama eklenmiş metaannotation kullanıyoruz @FeignClientve @Componentbuna ek açıklama ekliyoruz .)
@Componentarayüze eklemek sorunu çözer. Ama bence bu doğru bir yol değil ... Bence bu IntelliJ IDEA'da bir hata ya da çok zor olmamak için IntelliJ IDEA yeni Feign sürümleri için hazır değil. Daha kötü @Componentfeign sürümleri olmadan çalışır ( @FeignClientek açıklamanın org.springframework.cloud.netflix.feignyerine nerede olduğu org.springframework.cloud.openfeign- belki de sorunun nedeni budur?). Bunun için daha fazla ayrıntı (belki bir hata bileti) buldunuz mu?
@Component) 'dir @FeignClientden org.springframework.cloud.netflix.feign) paketin.
Ve önemli bilgilerin son bir parçası - ComponentScanböylece app tel gereken şeyler hakkında bilmek böylece ekleyin . Bu, bu soru için geçerli değildir. Ancak hiç bir @autowiringşey yapılmıyorsa, bu muhtemelen sizin çözümünüzdür.
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
Yapmanız gereken şey
@ComponentScan("package/include/your/annotation/component") içinde AppConfiguration.java.
AppConfiguraion.javaPaketinizin ek açıklama bileşeninizin (@Service, @Component ...) paketinden daha derin olduğunu düşündüğüm için ,
gibi "package/include/your/annotation/component/deeper/config".
Başvurumda da benzer bir sorun yaşadım. Ek açıklama eklediğimde yanlış vurgulama kayboldu.
@ContextConfiguration(classes = {...})
IntelliJ v.14'te göründüğünde bu hatayı gizlemek için bu ek açıklamayı kullanıyorum:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Benim için çözüm @EnableAutoConfigurationUygulama sınıfına @SpringBootApplicationbunun altını çizeceği için yerleştirmekti. Onu silin ve eksik fasulye ile ilgili tüm uyarıları yok! Aptal Bahar ...
Bahar önyükleme uygulamamdaki bu soruna çözümüm, bahar uygulama içeriğini açmak ve eksik otomatik kablolu fasulye için sınıfı manuel olarak eklemekti!
(Proje Yapısı menüsü veya yay aracı penceresi üzerinden erişim ... "Bahar Uygulaması Bağlamı" düzenle)
Yani sadece benim ApplicationApplication bahar yapılandırmasını içeren SpringApplicationContext yerine, aynı zamanda eksik Bean içerir:
SpringApplicationContext:
et voilà: Hata mesajı kayboldu!
Bu hala en son IntelliJ'de bir hata gibi görünüyor ve olası bir önbellekleme sorunuyla mı ilgili?
@Repository ek açıklamasını yukarıda belirtilen mk321 olarak eklerseniz, kaydedin, ardından ek açıklamayı kaldırın ve tekrar kaydedin, bu sorunu çözer.
Ben sadece bunu çözmek için @EnableAutoConfiguration kullanmak zorunda kaldı, ancak bu hatanın hiçbir fonksiyonel etkisi yoktu.
Spring boot uygulama ana sınıfına @EnableAutoConfiguration yerleştirilerek çözülebilir.
Bazen - benim durumumda - nedeni yanlış bir ithalattır. Yanlışlıkla ithal ettim
import org.jvnet.hk2.annotations.Service
onun yerine
import org.springframework.stereotype.Service
Idea'nın önerilen ithalatında ilk tercihi körü körüne kabul ederek. Bana ilk kez birkaç dakika sürdü :-)
Şaşırtıcı bir şekilde, Eclipse ile başarılı bir şekilde yürütülen Feign odaklı bir proje InteliJ'de çalışamadı. Uygulama başlatıldığında InteliJ, serviceImpl katmanına enjekte etmeye çalıştığım Feign istemcisinden şikayet etti: field personRestClient (Feign istemcim) ... bulunamadı ... tür bir fasulye gerekli. Yapılandırmanızda '....' türünde bir fasulye tanımlamayı düşünün.
Neyin yanlış olduğunu anlamaya çalışmak için uzun zaman harcadım. Tamamen anlamadığım bir çözüm buldum (InteliJ için):
Veya Eclipse'i seçin :)
Test sınıfı için @AutoConfigureMockMvc kullanın.
basit 2 adım yapmak zorunda
==>> change @Autowired to @Resource
IntelliJ IDEA Ultimate
Ana sınıfınızı IntelliJ Spring Uygulama Bağlamına ekleyin, örneğin Application.java
File -> Project Structure..
sol taraf: Proje Ayarı -> Modüller
sağ taraf: paket yapınızda bulun
Springve ekleyin+ Application.java