IntelliJ IDEA, Spring'in @Autowired açıklamasını kullanırken hataları gösteriyor


103

IntelliJ IDEA @Autowiredsınıfta Spring'in açıklamasını kullandığımda hatalar gösteriyor , ancak sınıf sorunsuz çalışıyor.

İşte bu hata mesajı:

Otomatik kablolu üyeler geçerli yaylı fasulye (@ Bileşen / @ Hizmet, vb.) Daha az ... (Ctrl + F1) Bir fasulye sınıfındaki otomatik kablolama sorunlarını kontrol eder.


5
bunu kullanmayı deneyin: @SuppressWarnings ("SpringJavaAutowiringInspection")
i-bob

Entegrasyon testi sınıflarım için de aynı hatayı görüyorum. @SupressWarnings ek açıklamasını kullanmanın güzel bir çözüm olduğunu düşünüyorum.
Kevin Wittek

Intellij 2016.2, bunu ilkbahar önyükleme / yay veri projemle yapıyor. Intellij hangi fasulyelerin var olduğunu tespit etmek için hangi dosyaya bakıyor?
Adam

2
@SuppressWarnings ("SpringJavaAutowiredMembersInspection") kullanmak zorunda kaldım
user672009

3
IntelliJ IDEA 2017.3.1 (Ultimate Edition) kullanımı için@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
lealceldeiro

Yanıtlar:


32

IntelliJ IDEA 13.1.4 ile aynı sorunu yaşadım. Bunu, Yay yüzünü (Dosya-> Proje Yapısı) kaldırarak ve "Algılama" gösterecek şekilde bırakarak çözdüm.


36
Ama ya gerçekten bir fasulyeye açıklama eklemeyi unutursanız? Herhangi bir uyarı almayacak mısın?
Cleankod

22

Çekirdeğin var olduğunu ve bunun yalnızca denetimlerle ilgili bir sorun olduğunu biliyorsanız, değişken bildiriminden önce aşağıdakileri eklemeniz yeterlidir:

@SuppressWarnings("SpringJavaAutowiringInspection")
@Inject MyClass myVariable;

Bazen IntelliJ, bir fasulye bildirilmişse, örneğin çekirdek koşullu olarak dahil edildiğinde ve koşul çözümlemesi çalışma zamanında gerçekleştiğinde çözemez.


22

Bastırma uyarısını ekleyerek düzelttim:

 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
 @Autowired
 private ....

19

Burada aynı hatayı aldım!

Görünüşe göre Intellij, sınıf uygulamasının bir @Service veya @Component olup olmadığını doğrulayamıyor.

Sorunu sadece Hatadan Uyarı olarak değiştirerek çözün (Alt + Enter tuşlarına basarak).


18

.İml dosyasını tüm proje modülünüzden kaldırın ve ardından Dosya -> Önbellekleri Geçersiz Kıl / Yeniden Başlat'a gidin.


9
Yüzleri kaldırmak ve uyarıları veya benzer "düzeltmeleri" bastırmak mantıklı veya akıllıca görünmedi, bu yüzden buna bir şans verdim. Ama son adımı aynı şekilde yapmadım. Onun yerine sildim.iml dosyayı üzerinde maven seçeneklerinde reimport seçti pom.xmldosyası ve yaptım ctrl + syeniden oluşturmak için .iml. Hatalar gitti.
ChiefTwoPencils


5

Ben de aynı sorunu yaşadım. İlgili her modül için Yay fasetini (Dosya-> Proje Yapısı) ekleyerek çözdüm ve ardından yapılandırma dosyalarını ekledim. Bazı projeler için (spring mvc), yapılandırma dosyaları otomatik olarak algılanır. Ancak bir jar projesi için yapılandırma dosyalarını manuel olarak eklemem gerekiyordu.


4

Bahar fasulyesi tanımlarınızın doğru olduğundan emin olun. Bazen, uygulama iyi çalışır, sadece IDE'de bir hata görüntüler, eğer tanımlanmış bir Spring yüzünüz varsa, projenizin 'iml' dosyasını kontrol edin.


Ayrıca application-properties.xml dosyanızı da kontrol edin. Satır bağlamının: component-scan base-package = ”com.my.project” ifadesinin referans verdiğiniz hizmetin paketini dışlamadığını kontrol edin.
i-bob

Kodunuzu projemin "bec-job.iml" dosyasına koydum ama sorun hala devam ediyor ve projemde dosya adını "applicationContext-interface.xml" bulamıyorum, detaylı olarak anlatır mısınız ?
Vainlyh

@SuppressWarnings ("SpringJavaAutowiringInspection") kodunuzun yüksek kırmızı olan @Autowired kısmının hemen üstüne koymalısınız. Bu şekilde IntelliJIdea, hangi uyarının bastırılacağını anlar.
i-bob

"applicationContext-interface.xml" değil, "application-properties.xml" dosyasını bulmalısınız
i-bob

1
Bu @SuppressWarnings ("SpringJavaAutowiringInspection") bana hile gibi geliyor ama işe yarıyor. Teşekkürler beyler.
Minras

3

Dosya >> Proje Yapısı >> Facets'e gidip tüm yapılandırma dosyalarını Spring Facet'e ekleyerek sorunu çözdük. Bundan sonra, çekirdeklerin bulunduğu dosyaları tespit etmeye başladı ve sorunu çözebildi. Bu çeki veren IntelliJ oldukça değerlidir ve IMHO devre dışı bırakılmamalıdır.


Baharı olası bir Facet olarak görmüyorum. Intellij'in hangi sürümüne sahipsiniz?
jDub9

2

Görünürlük sorunu gibi görünüyor - ana denetleyici kablolamaya çalıştığınız Bileşeni görmüyor.

Eklemeyi dene

@ComponentScan("path to respective Component") 

üst denetleyiciye.


2

IntelliJ Idea'nızın (IDE), modülünüzün incelendiği tüm gerekli yay yapılandırmalarından haberdar olduğundan emin olun.

Bunu altında kontrol edebilirsiniz

Dosya> Proje Yapısı> Modüller> [sağ paneldeki proje adınız]> Yay

Bazen, IDE'ye yay konfigürasyonunun bir bağımlılıktan geldiğini açıkça söylememiz gerekir (proje sınıf yolunuzda bulunan bir kavanoz)


1
bu topluluk sürümünde mi mevcut yoksa sadece nihai sürümde mi var?
Arşimet Trajano

1

Ben de aynı sorunu yaşıyorum. Benimki, otomatik kablolu referansı içeren fasulyenin bir Spring bileşeni olmadığı için (bir EJB idi), ancak otomatik kablolama kullanımına izin veren bir SpringBeanAutowiringInterceptor Interceptor aldı. Intellij'in Autowiring incelemesinde bu olasılığı dikkate almadığını düşünüyorum.


1

Ben de bu problemi yaşadım. alt+ Yapmak enterve ardından etkilenen hattaki Yay denetimini yeniden çalıştırmak veya devre dışı bırakmak istemek sorunu çözdü. Bu yalnızca 13.4 güncellemesinden sonra bir sorun haline gelmiş gibi görünüyor.


1

benim durumumda web.xml'de yazmak istemiyordum:

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:applicationContext.xml</param-value>
   </context-param>

ve uygulama bağlam dosyasında:

<context:component-scan base-package=[your package name] />

Bu etiketleri ekledikten ve projeyi yeniden oluşturmak için maven'i çalıştırdıktan sonra intellj'deki otomatik kablolama hatası ortadan kalkar ve fasulye simgesi sol kenarda görünür: görüntü açıklamasını buraya girin


1

Benimki CrudRepository arayüzüme @Repository eklememek için, izlediğim eğitim STS'ye eklemedi ve şikayet etmedi.


1

Sınıfa @Component, @Repository veya benzerinin eklenip eklenmediğini kontrol etmelisiniz.



0
eg1:
directorSettings - Editor - Inspections - Spring - Spring Core - Code - Autowiring for Bean Class 
operate:checkout 勾去掉
eg2:
1.impl class add @service
like this:
@Service
public class CityServiceImpl implements CityService{
@Autowired
private CityDao cityDao;

like this
2.dao file class add @Repository
@Repository
public interface CityDao {

0

Bu sorunu bu şekilde çözdüm. IntelliJ'de tüm paketleriniz main / java'nın alt paketi olan bir alt pakette olmalıdır. Örneğin, tüm paketleri src / main / java / com.misisol.watchStore / altına koydum ve spring fasulyelerimi daha sonra bulabilir.


0

Bean'e @Qualifier enjekte et benim için sorunu çözdü.


0

Benim de benzer bir problemim vardı. "Açıkça açıklamalı çekirdekleri işle" seçeneğinin işaretini kaldırarak sorunu çözdüm (aşağıdaki ekran görüntüsüne bakın). Bu seçenek, Linux'ta varsayılan olarak etkindir. Artık @Service ve @Configurations ek açıklamaları görülebilir. ekran görüntüsü


0

biraz geç ama umarım başkasına yardımcı olur.

@Service'i hizmet için uygulama sınıfına koyduğunuzdan emin olun.

@Service
public class ServiceNameImpl implements ServiceName {

    @Override
    public void method(ObjectType paramName) {
        //CODE
    }

}

Hatayı böyle düzelttim.


0

Bunun eski bir soru olduğunu biliyorum, ancak bu sorunu benim için çözen herhangi bir cevap bulamadım, bu yüzden çözümümü sağlayacağım.

Not: Ben sorunu olabilir düşünce bu , ama sorunum iki kez aynı arabirim uygulama ile ilgili değildi. Kullanmak @Qualitiersorunumu çözdü, ancak bu bir bandajdı ve uygun bir çözüm değildi, bu yüzden onunla yetinmedim.

ARKA FON

Baharın farklı sürümlerinden geçmiş ve yalnızca ayrı modüller için güncellenmiş eski bir projeyi sürdürmekle görevlendirildim, bu yüzden en azından söylemek gerekirse, yeniden düzenleme gerekiyordu. Başlangıçta mükerrer fasulye sorununu almıştım ve işleri düzeltmek, yalnızca bir fasulye olmasına rağmen, OP'nin sorunu ile yinelenen fasulye sorunu arasındaki sorunu ileri geri değiştirdi; çift ​​çekirdeklere gitmek her zaman aynı sınıfa gidiyordu.

SORUN

Sorun bir @Repositorysınıfta mevcuttu@Autowired bulunan bir @Servicesınıfta mevcuttu @ComponentScan. Ben de bir yay olduğunu fark ettim application-config.xmla yapıyorducontext:component-scan ben Bahar eski sürümlerinde orijinal yaklaşım olduğuna inanmak baz paket üzerinde. Birkaç yıl içinde geliştirilen farklı projelerde kullanılan bir destek projesinde eski bir şubenin ve daha yeni bir şubenin parçalarını alarak yeni bir şube yapma sürecindeydim ve bu yüzden böyle bir karma-eşleştirme vardı. metodolojiler.

BASİT ÇÖZÜM

Daha modern kullanım yaklaşımı @ComponentScanzaten uygulandığından, sadece kaldırdım application-config.xmlve sorun çözüldü.


0

Aşağıdakiler benim için çalıştı:

  1. Hata veren hizmeti (arabirimi) uygulayan tüm sınıfları bulun.
  2. Bu sınıfların her birini, iş mantığı sınıfları olarak belirtmek için @ Hizmet ek açıklamasıyla işaretleyin.
  3. Projeyi yeniden oluşturun.

0

Biraz geç kalmış olabilirim ama saatler geçirip bu konuda araştırma yaptıktan sonra.

En son sürümde IntelliJ 2020 @AutoWired'ın isteğe bağlı olduğunu ve yapıcı tabanlı depedency enjeksiyonunun tercih edildiğini öğrendim.

@AutoWired Annotation'ı Service and Controller sınıfından kaldırarak ve yapıcı tabanlı bağımlılık enjeksiyonu kullanarak sorunu çözdüm .

Bu bağlantı yardımcı olabilir.

Mutlu Kodlama!


0

IntelliJ'in 2019.2.4 sürümüyle yapıcı tabanlı bağımlılık enjeksiyonu ile yalnızca bir hizmette bu sorunu yaşadım. Hizmetin adını değiştirmeyi (shift + f6) ve ardından git düzeyindeki değişiklikleri atmayı yararlı buldum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.