IntelliJ IDEAがSpringの@Autowiredアノテーションを使用するとエラーを表示する


102

@AutowiredクラスでSpringのアノテーションを使用すると、IntelliJ IDEAでエラーが表示されますが、クラスは問題なく機能しています。

このエラーメッセージは次のとおりです。

自動配線されたメンバーは、有効なSpring Bean(@ Component / @ Serviceなど)で定義する必要があります。less ...(Ctrl + F1)Beanクラスの自動配線の問題をチェックします。


5
これを使用してみてください:@SuppressWarnings( "SpringJavaAutowiringInspection")
i-bob

統合テストクラスでも同じエラーが発生します。@SupressWarningsアノテーションを使用するのは良い解決策だと思います。
Kevin Wittek 2015年

Intellij 2016.2は私のスプリングブート/スプリングデータプロジェクトでこれを行っています。どのファイルが存在するかを確認するためにIntellijはどのファイルを調べていますか?
アダム

2
@SuppressWarnings( "SpringJavaAutowiredMembersInspection")を使用する必要がありました
user672009

3
IntelliJ IDEA 2017.3.1(Ultimate Edition)の場合@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
lealceldeiro

回答:


31

IntelliJ IDEA 13.1.4でも同じ問題が発生しました。Springファセット([ファイル]-> [プロジェクト構造])を削除し、「検出」のみを表示することで解決しました。


36
しかし、実際にBeanに注釈を付けることを忘れた場合はどうでしょう。警告は表示されませんか?
Cleankod 2015年

22

Beanが存在し、それが検査の問題であることがわかっている場合は、変数宣言の前に次のコードを追加します。

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

Beanが条件付きで含まれていて、実行時に条件解決が行われる場合など、Beanが宣言されているとIntelliJが解決できない場合があります。


21

抑制の警告を追加して修正しました。

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

19

ここで同じエラーが発生しました!

Intellijは、クラスの実装が@Serviceまたは@Componentであるかどうかを確認できないようです。

エラーから警告に変わるだけで解決します(Alt + Enterキーを押します)。


18

すべてのプロジェクトモジュールから.imlファイルを削除し、次に[ファイル]-> [キャッシュの無効化/再起動]に移動します。


9
ファセットを削除し、警告または同様の「修正」を抑制することは論理的または賢明に思えなかったので、これを試してみました。しかし、私は最後のステップを同じようにはしませんでした。代わりに、.imlファイルを削除し、ファイルのmavenオプションに再インポートすることを選択pom.xmlし、ctrl + sを再生成してを再生成しました.iml。エラーはなくなりました。
ChiefTwoPencils 2015年


5

私も同じ問題を抱えていました。関連するモジュールごとにSpringファセット([ファイル]-> [プロジェクト構造])を追加し、構成ファイルを追加することで解決しました。一部のプロジェクト(Spring MVC)では、構成ファイルが自動的に検出されます。ただし、jarプロジェクトの場合は、構成ファイルを手動で追加する必要がありました。


4

Spring Beanの定義が正しいことを確認してください。アプリケーションが正常に動作する場合があります。IDEでエラーが表示されるだけです。Springファセットが定義されている場合は、プロジェクトの「iml」ファイルを確認してください。


application-properties.xmlも確認してください。行context:component-scan base-package =” com.my.project”が参照しているサービスのパッケージを除外していないか確認してください。
i-bob 2014年

私はあなたのコードを私のプロジェクトの「bec-job.iml」に入れました、しかし問題はまだ存在しています。そして私は私のプロジェクトで「applicationContext-interface.xml」というファイル名を見つけることができません、それについて詳しく教えてもらえますか?
Vainlyh 2014年

@SuppressWarnings( "SpringJavaAutowiringInspection")は、赤くハイライトされているコードの@Autowired部分の真上に置く必要があります。このようにしてIntelliJIdeaは抑制する警告を認識します。
i-bob 2014年

「applicationContext-interface.xml」ではなく、「application-properties.xml」というファイルを見つける必要があります
i-bob

1
@SuppressWarnings( "SpringJavaAutowiringInspection")は私にはハッキリに思えますが、機能します。みんなありがとう。
Minras 2014

3

[ファイル] >> [プロジェクト構造] >> [ファセット]に移動し、すべての構成ファイルをSpringファセットに追加することで問題を解決しました。その後、Beanが存在するファイルの検出を開始し、問題を分類することができました。このチェックを与えるIntelliJは非常に価値があり、IMHOを無効にするべきではありません。


私は春を可能性のあるファセットとは見ていません。Intellijのどのバージョンをお持ちですか?
jDub9

2

可視性の問題のようです-親コントローラーが配線しようとしているコンポーネントを認識していません。

追加してみてください

@ComponentScan("path to respective Component") 

親コントローラーに。


2

IntelliJアイデア(IDE)が、モジュールが検査されている必要なすべてのスプリング構成を認識していることを確認してください。

以下で確認できます

ファイル>プロジェクト構造>モジュール> [右側のパネルのプロジェクト名]> Spring

時々、春の構成が依存関係(プロジェクトのクラスパスに存在するjar)からのものであることをIDEに明示的に通知する必要があります


1
これはコミュニティエディションで利用できますか、それとも究極のものだけですか?
アルキメデストラハノ2017年

1

同じ問題が発生しました。私の考えは、自動配線された参照を含むBeanがSpringコンポーネントではなく(EJBでした)、自動配線の使用を可能にするSpringBeanAutowiringInterceptor Interceptorを取得したためです。Intellijは自動配線検査でこの可能性を考慮していないと思います。


1

私もこの問題を抱えていました。やってalt+にenterして、それを修正し、影響ライン上のいずれかの再実行または無効春検査に尋ねます。これは、13.4アップデート後にのみ問題になったようです。


1

私の場合、web.xmlに書き込むために欠けていました:

    <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>

アプリケーションコンテキストファイル内:

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

このタグを追加し、mavenを実行してプロジェクトを再構築した後、intellj desapearsで自動配線エラーが発生し、Beanアイコンが左マージンに表示されます。 ここに画像の説明を入力してください


1

私のは、CrudRepositoryインターフェースに@Repositoryを追加しないためのものです。私が見ているチュートリアルでは、STSに@Repositoryを追加しておらず、不満もありませんでした。




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

私はこの問題をこの方法で解決しました。IntelliJでは、すべてのパッケージがmain / javaのサブパッケージであるサブパッケージにある必要があります。たとえば、すべてのパッケージをsrc / main / java / com.misisol.watchStore /の下に置いて、その後、Springが私の豆を見つけることができました。



0

同様の問題がありました。「明示的に注釈が付けられたBeanを処理する」オプションをオフにすることで解決しました(下のスクリーンショットを参照)。このオプションは、Linuxではデフォルトで有効になっています。@Serviceおよび@Configurationsアノテーションが表示されるようになりました。 スクリーンショット


0

少し遅れますが、他の人の役に立つことを願っています。

@Serviceをサービスの実装クラスに配置してください

@Service
public class ServiceNameImpl implements ServiceName {

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

}

それは私がエラーを修正した方法です。


0

私はこれが古い質問であることを知っていますが、この問題を解決する答えを見つけていないので、解決策を提供します。

注:問題はこれである可能性があると思いましたが、私の問題は同じインターフェースを2回実装することとは関係がありませんでした。を使用@Qualitierして私の問題は消えましたが、それは包帯であり、適切な解決策ではなかったので、それで解決しませんでした。

バックグラウンド

私は、Springのさまざまなバージョンを経て、個別のモジュール用にのみ更新された古いプロジェクトを維持する必要があります。そのため、控えめに言っても、リファクタリングが必要でした。私は最初に重複Beanの問題を取得し、物事をいじくり回すと、問題がOPの問題と重複Beanの問題の間で前後しました。重複するBeanに移動すると、常に同じクラスに移動しました。

問題

この問題は、注釈が付けられていたクラスにある@Repositoryクラスに存在していました。また、ベースパッケージで実行しているスプリングもあることに気付きました。これは、以前のバージョンのSpringでの元のアプローチであると思います。私は、数年にわたって開発されたさまざまなプロジェクトで使用されていたサポートプロジェクトの古いブランチと新しいブランチの一部を取り、新しいブランチを作成する過程にありました。そのため、このような組み合わせがありました。方法論の。@Autowired@Service@ComponentScanapplication-config.xmlcontext:component-scan

シンプルなソリューション

使用のより近代的なアプローチ@ComponentScanがすでに実装されているので、私はを削除しただけでapplication-config.xml問題は解決しました。


0

以下は私のために働きました:

  1. エラーの原因となっているservice(interface)を実装しているすべてのクラスを見つけます。
  2. それらの各クラスに@Serviceアノテーションを付けて、ビジネスロジッククラスであることを示します。
  3. プロジェクトをリビルドします。

0

私は少し遅れるかもしれませんが、何時間も費やしてこの問題について調査した後。

私は最新バージョンのIntelliJ 2020でそれを発見しましたでは@AutoWiredはオプションであり、コンストラクターベースの依存性注入が望ましいことが。

@AutoWiredを削除するだけで問題を解決しましたサービスとコントローラークラスからアノテーションをコンストラクターベースの依存性注入を使用。

このリンクが役立つかもしれません。

ハッピーコーディング!


0

IntelliJの2019.2.4バージョンで、コンストラクターベースの依存関係注入を使用した1つのサービスのみでこの問題が発生しました。サービスの名前を変更し(shift + f6)、変更をgitレベルから破棄すると便利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.