自動配線されたリポジトリにタイプのBeanが見つからないとintellijが誤って言っている


138

簡単な単体テストを作成しましたが、IntelliJが誤って赤で強調表示しています。エラーとしてマークする

豆なし?

ここに画像の説明を入力してください

以下を見るとわかるように、テストに合格していますか?だからそれは自動配線されている必要がありますか?

ここに画像の説明を入力してください


3
IntelliJが誤検出のautowireエラーを出すことがあります。たとえば、Spring Bootアプリケーションでは、多くの構成がEnableAutoConfigurationの背後に隠されています。そのための未解決の問題があります。その他の原因は、誤って構成されたSpringファセットである可能性があります。私は通常、このような状況で何をすべきかは、それはあまり目立たないですように検査の重要度を下げている...
Bohuslav BURGHARDT

回答:


177

アノテーションを使用してSpring Bootアプリケーションを作成するときにも同じ問題が発生しました@SpringBootApplication。この注釈は、を表し@Configuration@EnableAutoConfigurationそして@ComponentScanに従ってスプリング参照

予想どおり、新しい注釈は適切に機能し、アプリケーションはスムーズに実行されましたが、Intellij@Autowire依存関係が満たされていないことについて不平を言い続けました。を使用するように変更するとすぐ@Configuration@EnableAutoConfiguration@ComponentScan個別にエラーが発生しなくなりました。そうですのIntelliJ 14.0.3(あまりにも、最も可能性の高い、それ以前のバージョン)がまだ認識するように構成されていない@SpringBootApplication注釈を。

とりあえず、エラーがそれほど気にならない場合は、これら3つの個別のアノテーションに戻ってください。それ以外の場合は、Intellijを無視してください。テストに合格したため、依存関係の解決は正しく構成されています。

常に覚えています...

人は常に機械よりも優れています。


1
Intellijの新しいバージョン(2017.1でチェック)で問題が修正されました
Sourabh

45
私はまだ2017.2でそれを手に入れています、そしてそれは究極のライセンスの支払いです。
Thomas Carlisle

1
私は例をテスト2017.2とSprintBootTest外部クラスと春のクラウドストリームあたりとしてSpringBootApplication静的内部クラスでそれを取得しています:docs.spring.io/spring-cloud-stream/docs/current/reference/html/...
danebez

4
IntelliJの最近のバージョン(2017など)では、Spring Dataプラグインを有効にする必要があり、上記の回避策は必要ありません。以下に、その方法を説明する別の回答があります。
Norbert

4
IntelliJ 2018.2で、Spring Boot 2.0.5を使用すると、@SpringBootApplicationこのエラーが発生しました。@JaのMatosのアドバイスに従い、scanBasePackagesパラメーターを使用して、@SpringBootApplicationスキャンする必要があるパッケージ/名前空間を指定しました。
Dave Goodchild、2018年

53

@RepositoryリポジトリクラスにSpringアノテーションを追加します。

このアノテーションがなくても機能するはずです。ただし、これを追加しても、IntelliJはエラーを表示しません。

@Repository
public interface YourRepository ...
...

拡張でSpring Dataを使用する場合 Repositoryクラスで使用すると、競合が発生します。次に、明示的なパッケージを示す必要があります。

import org.springframework.data.repository.Repository;
...

@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
    ...
}

次に、エラーなしでリポジトリを自動配線できます。

@Autowired
YourRepository yourRepository;

それはおそらく良い解決策ではありません(リポジトリを2回登録しようとしていると思います)。しかし、私のために働き、エラーを表示しません。

IntelliJの新しいバージョンで修正できる可能性があります:https : //youtrack.jetbrains.com/issue/IDEA-137023



@Componentも機能するようです。インターフェイス/クラスを強制的にスキャンする必要があるようです
Brett

@Repositoryを追加する必要はありません。ちょうどSpring Dataプラグイン。
Shin Kim

3
3年後、再び壊れる
garyM

私のマッパーインターフェイス(mybatis)には/ @ Mapperを使用しました。IDEAはこの警告をスローします。私はそれを/ @ Repositoryに変更し、警告は消えました。
bzuo

32

IntelliJ IDEA Ultimate(2016.3.4 Build 163)の私のバージョンはこれをサポートしているようです。コツは、Spring Dataプラグインを有効にする必要があることです。

ここに画像の説明を入力してください


これで私も問題が解決しました-これは、コードを正しく設定している人にとっては本当の問題のようです!
松Q.18年

5
2017.2.7では機能しません。プラグインは有効になっていますが、警告はまだ残っています。
18

iJ Ultimate 2018.2.5で私のために働いた。
JL_SO 2018年

23

@ComponentScanがコンポーネントをスキャンする場所を指定する必要がある場合があります。これを行うには、パッケージをこのアノテーションのパラメータとして渡します。例:

@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})

ただし、すでに述べたように、@ SpringBootApplicationアノテーションは@ComponentScanに取って代わります。そのため、そのような場合は同じことを行う必要があります。

@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})

少なくとも私の場合、Intellijは文句を言うのをやめました。


2
これは間違いなくより良い、よりクリーンなソリューションであり、これにより警告が削除されたことを確認できます。ありがとう!
Dave Goodchild

2
私の場合@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"}) 、アプリは正常に動作しましたが、intellijはそれが気に入らなかった。@SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})修正済みに変更されました!
GriffoGoes

1
これはIDE間で移植可能であり、開発者の意図を明確に伝えるので、これは断然最良のソリューションです。
MusikPolice

究極の2019.3.1 Spring Boot 2.2.1とJava 11.0.4を使用しています。問題はユニットテストファイルにまだ存在しています。
garyM

1
@GriffoGoesが提案した問題が私の問題を修正しました。マルチモジュール構造を使用していたので、それが私の最善の解決策でした
Juan Monsalve

20

私は常にこの問題を解決します。 設定>インスペクション>スプリングコア>コードより、エラーから重大度オプションの警告にシフトします

ここに画像の説明を入力してください


2
Springで修正が行われるまで、私はこのソリューションを使用しました。youtrack.jetbrains.com
Garry Polley

15

Spring-Boot 2.0とIntellij 2018.1.1 Ultimate Editionを使用していますが、同じ問題に直面しました。

メインアプリケーションクラスに@EnableAutoConfigurationを配置することで解決しました

@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}

13
これは私にとっても"作品"が、その後、IntelliJの文句: Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration ¯\ _(ツ)_ /¯
マイケル・

6

サービスクラスの@Serviceアノテーションを見逃していないかどうかを確認してください。


5

Beanの設定ファイルに入れ@Componentたり@configuration、ファイルに入れたりすると、次のように機能するようです。

@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");
    }
}

4

IDEを満足させるためだけにコードを変更したくない場合。Springファセットにすべてのコンポーネントを追加することで解決しました。

  1. 「Service、Processors and Routers」という名前または好きな名前のグループを作成します。
  2. 以前に作成したグループを親として使用して、「Spring Application Context」を削除して再作成します。

ここに画像の説明を入力してください


4

テストに合格している限り、問題はありません。alt + enterエラーの上にカーソルを置くと、最初の項目のサブメニュー内でDisable Inspection選択できます。


ありがとう。ちなみに、デフォルトではないすべての変更をIntelliJ設定の1つのビューに表示する方法はありますか?
powder366

3

Spring Bootアプリケーションでも同様の問題がありました。アプリケーションはFeign(注釈付きインターフェースからの要求を合成するHTTPクライアント)を利用します。FeignはインターフェースにSomeClientアノテーションが付けられており@FeignClient、このインターフェースを実装するランタイムプロキシクラスを生成します。一部のSpringコンポーネントがタイプのBeanを自動接続しようとすると、実際のクラスがプロジェクトに実際に存在せず、Ideaが理解するように教えられていないため、IdeaはSomeClientタイプのBeanがSomeClient見つからないというメッセージを表示します。@FeignClientアノテーション。

ソリューション:注釈インタフェースをSomeClient持ちます@Component。(この場合、直接@FeignClientアノテーションを使用SomeClientするのではなく、アノテーション@OurProjectFeignClientが付けられたメタアノテーションを使用し@FeignClient、それに@Componentアノテーションを追加することもできます。)


はい、@Componentインターフェイスに追加すると問題が解決します。しかし、これは正しい方法ではないと思います...私の意見では、これはIntelliJ IDEAのバグであるか、それほど難しくないため、IntelliJ IDEAは新しいFeignバージョンに対応していません。それはせずに動作します@Component(erlier装うバージョンで@FeignClient注釈がしていたorg.springframework.cloud.netflix.feignの代わりにorg.springframework.cloud.openfeign? -多分これが問題の原因です)。これに関する詳細(バグチケットなど)を見つけましたか?
ジョセフ

私の場合は、(なしに動作しませんでしたけれどもいいえ、私は、持っていない@Component)である@FeignClientからorg.springframework.cloud.netflix.feign)パッケージ。
トマーシュZáluský

3
JetBrainsバグトラッカーでの問題はこちら:youtrack.jetbrains.com/issue/IDEA-168155
Josef Reichardt


2

そして最後の重要な情報- ComponentScanアプリが配線する必要があることをアプリが認識できるように追加します。これは、この質問の場合には関係ありません。ただし、何@autowiringも実行されていない場合は、これがおそらくソリューションです。

@Configuration
@ComponentScan(basePackages = {
    "some_package",
})
public class someService {

これは理にかなっていて、私にとってはトリックでした。なぜ警告をオフにするのですか?警告は期待どおりに機能するはずです!
WebComer 2017年

2

あなたがする必要があるのは追加です

@ComponentScan("package/include/your/annotation/component") の中でAppConfiguration.java

あなたAppConfiguraion.javaののパッケージは注釈コンポーネント(@Service、@Component ...)のパッケージより深いと思うので、

など"package/include/your/annotation/component/deeper/config"


@ComponentScan( "package.include.your.annotation.component")!
Iakov Senatov

2

アプリケーションにも同様の問題がありました。アノテーションを追加すると、誤ったハイライトが消えました。

@ContextConfiguration(classes = {...})

テストパッケージのみ!
Iakov Senatov

2

このアノテーションを使用して、IntelliJ v.14で表示されるときにこのエラーを非表示にしています。

@SuppressWarnings("SpringJavaAutowiringInspection")

コンストラクターに自動配線された場合@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Loren

2

私にとっての解決策は@EnableAutoConfiguration、Applicationクラスに配置@SpringBootApplicationすることでした。その下線は冗長であるためです。それを削除して、欠けている豆に関する警告をすべて消してください!愚かな春...


2

私の場合、@ Autowiredにしようとしたディレクトリは同じレベルではありませんでした。

同じ構造レベルで設定した後、エラーが消えた

それが誰かを助けることができることを願っています!


1

私の春のブートアプリケーションでこの問題を解決するには、春のアプリケーションコンテキストを開いて、不足しているautowired Beanのクラスを手動で追加します。

(プロジェクト構造メニューまたはスプリングツールウィンドウからアクセス...「スプリングアプリケーションコンテキスト」を編集)

したがって、SpringApplicationContextの代わりに、私のExampleApplicationスプリング構成だけが含まれていますが、不足しているBeanも含まれています。

SpringApplicationContext:

  • ExampleApplication.java
  • MissingBeanClass.java

etvoilà:エラーメッセージが消えました!


1

これはまだ最新のIntelliJのバグのようで、キャッシュの問題の可能性と関係がありますか?

上記のmk321として@Repositoryアノテーションを追加し、保存してから、アノテーションを削除して再度保存すると、問題が修正されます。


1

この作業を行うために必要なのは次のコードだけです。

@ComponentScan
public class PriceWatchTest{

    @Autowired
    private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}

1

@EnableAutoConfigurationを使用して対処する必要がありましたが、このエラーによる機能への影響はありませんでした。


1

スプリングブートアプリケーションのメインクラスに@EnableAutoConfigurationを配置することで解決できます。


0

時々-私の場合は-理由は間違ったインポートです。誤ってインポートした

import org.jvnet.hk2.annotations.Service

の代わりに

import org.springframework.stereotype.Service

Ideaが提案するインポートの最初の選択を盲目的に受け入れることによって。それが最初に起こったときに私に数分かかった:-)


0

驚いたことに、Eclipseで正常に実行されたFeign指向のプロジェクトはInteliJでは実行できませんでした。アプリケーションを開始すると、InteliJは、serviceImplレイヤーに注入しようとしたFeignクライアントについて次のように文句を言いました。構成でタイプ '....'のBeanを定義することを検討してください。

何が悪いのかを理解しようとして、長い時間を無駄にしました。私は完全には理解していない解決策(InteliJ用)を見つけました:

  1. Alt Shift F10(または実行メニュー)
  2. 「構成の編集」を選択します
  3. 設定ウィンドウで、「「提供された」スコープを持つ依存関係を含める」チェックボックスをオンにします
  4. アプリケーションを実行する

またはEclipseを選択してください:)


0

Beanのパッケージが正しく記述されているかどうかを確認してください

//Check if this is written right 
package com.package1.package2.package3


import ...

@Service
class ServiceX {

  ...

}


0

IDEAにmybatisプラグインをインストールすることで問題を解決しました。Mybatisプラグインをインストールすると、プラグインが消えました。


0

2つのステップを実行する必要がある単純な

  1. 休止状態コアの依存性を追加する
  2. @Autowiredを@Resourceに変更します。
==>> change @Autowired to  @Resource

あなたの答えを説明しなさい。
mentallurg

0

IntelliJ IDEA Ultimate

メインクラスをIntelliJ Springアプリケーションコンテキストに追加します(例:Application.java)。

File -> Project Structure..

左側:プロジェクト設定->モジュール

右側:パッケージ構造で見つけて Spring追加+ Application.java


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