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
, @EnableAutoConfiguration
ve @ComponentScan
uygun 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 @Autowire
bağımlılıklar hakkında şikayet etmeye devam etti . En kısa zamanda kullanmaya geri değiştikçe @Configuration
, @EnableAutoConfiguration
ve @ComponentScan
ayrı 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) @SpringBootApplication
ek 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.
@SpringBootApplication
bu hatayı alıyordum. @ Jaõs Matos'ın tavsiyelerini takip ederek scanBasePackages
parametresini kullanarak taradım @SpringBootApplication
ve taranması gereken paketi / ad alanlarını belirledim.
@Repository
Depo 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 Repository
sı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 @Component
veya @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 + enter
hata imleci alarak ve bulacağınız ilk öğenin alt menü içinden Disable Inspection
o 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 SomeClient
ek açıklama eklenmiş olan @FeignClient
Feign, 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ü SomeClient
ile @Component
. (Bizim durumumuzda, doğrudan @FeignClient
ek açıklama SomeClient
kullanmıyoruz @OurProjectFeignClient
, ek açıklama eklenmiş metaannotation kullanıyoruz @FeignClient
ve @Component
buna ek açıklama ekliyoruz .)
@Component
arayü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ü @Component
feign sürümleri olmadan çalışır ( @FeignClient
ek açıklamanın org.springframework.cloud.netflix.feign
yerine 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 @FeignClient
den org.springframework.cloud.netflix.feign
) paketin.
Ve önemli bilgilerin son bir parçası - ComponentScan
bö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.java
Paketinizin 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 @EnableAutoConfiguration
Uygulama sınıfına @SpringBootApplication
bunun 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
Spring
ve ekleyin+
Application.java