web-dev-qa-db-ja.com

intellijがautowiredリポジトリにタイプのBeanが見つからないと誤って言っている

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

豆じゃない?

enter image description here

あなたが下で見ることができるように、それはテストに合格しますか?それではAutowiredに違いありませんか?

enter image description here

100
Robbo_UK

@SpringBootApplicationアノテーションを使ってSpring Bootアプリケーションを作成するときにも同じ問題がありました。このアノテーションは spring reference に従って@Configuration@EnableAutoConfigurationおよび@ComponentScanを表します。

予想通り、新しいアノテーションは正しく機能し、私のアプリケーションはスムーズに動作しましたが、Intellijは満たされていない@Autowire依存関係について不満を言い続けました。 @Configuration@EnableAutoConfiguration、および@ComponentScanを別々に使用するように変更した直後に、エラーはなくなりました。 Intellij 14.0.3(そしておそらく以前のバージョンも)はまだ@SpringBootApplicationアノテーションを認識するように設定されていません。

今のところ、エラーがそれほどあなたに邪魔をするなら、それからそれらの3つの別々の注釈に戻ってください。そうでなければ、Intellijを無視してください。テストにパスしたので、依存関係の解決は正しく設定されています。

常に覚えています...

男はいつも機械よりも大きい。

129

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

私はそれがこの注釈なしでもうまくいくはずだと知っています。しかし、これを追加すると、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> {
    ...
}

そして次に、あなたはエラーなしであなたのリポジトリをautowireすることができます。

@Autowired
YourRepository yourRepository;

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

多分IntelliJの新しいバージョンで修正することができます。 https://youtrack.jetbrains.com/issue/IDEA-13702

41
mkczyk

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

enter image description here

21
Natix

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

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

ただし、既に述べたように、@ SpringSootApplicationアノテーションは@ComponentScanに置き換わるため、そのような場合は同じことを行う必要があります。

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

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

14
João Matos

私はいつもこの問題を解決しています..設定>検査> Spring Core>コードあなたより重大度オプションをエラーから警告に変更

enter image description here

13
cristianchiess

私はspring-boot 2.0とintellij 2018.1.1 ultimate editionを使っています、そして私は同じ問題に直面しました。

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

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

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

テストに合格している限り、alt + enterをヒットします。カーソルをエラーに合わせ、最初の項目のサブメニュー内でDisable Inspectionを選択します。

IDEを幸せにするためだけに、コードに変更を加えたくない場合は、 Springファセットにすべてのコンポーネントを追加して解決しました。

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

enter image description here

重要な情報の最後の1つ - ComponentScanを追加して、アプリがワイヤリングする必要があることを認識できるようにします。これはこの質問の場合には関係ありません。ただし、@autowiringがまったく実行されていない場合は、これがおそらく解決策です。

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

IntelliJ v.14に表示されるときにこのエラーを隠すためにこの注釈を使用しています。

@SuppressWarnings("SpringJavaAutowiringInspection")

あなたがする必要があるのはaddです

AppConfiguration.Java@ComponentScan("package/include/your/annotation/component")

AppConfiguraion.Javaのパッケージはあなたのアノテーションコンポーネント(@Service、@Component ...)のパッケージよりより深いだと思いますので、

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

2
sfwn

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

解決策:インタフェースSomeClient@Componentでアノテーションを付けてください。 (私たちの場合、SomeClient@FeignClientアノテーションを直接使用するのではなく、@OurProjectFeignClientアノテーションを付けたメタアノテーション@FeignClientを使用し、それに@Componentアノテーションを追加しても同様に機能します。)

2

アプリケーションにも同様の問題がありました。注釈を追加すると、誤った強調表示が消えました。

@ContextConfiguration(classes = {...})
2
K. Gol

私にとっての解決策は、@EnableAutoConfigurationをApplicationクラスの@SpringBootApplicationの下に配置することです。それを削除して、行方不明の豆に関する警告がすべて消えます。愚かな春...

1

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

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

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

1
Davel_AG

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

@ComponentScan
public class PriceWatchTest{

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

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

1
Smart Coder

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

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

1
Jensen Buck

サービスクラスで@Serviceアノテーションを見逃していないかどうかを確認してください。これは私にとってそうでした。

1
yankae

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

1
Nirbhay Rana

テストクラスには@AutoConfigureMockMvcを使用します。

0

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

import org.jvnet.hk2.annotations.Service

の代わりに

import org.springframework.stereotype.Service

アイデアの提案された輸入品の最初の選択を盲目的に受け入れることによって。それが最初に起こった時に私に数分かかりました:-)

私のSpring Bootアプリケーションにおけるこの問題に対する私の解決策は、Springアプリケーションのコンテキストを開いて、足りないautowired beanのクラスを手動で追加することでした!

([プロジェクト構造]メニューまたはSpringツールウィンドウからアクセス... "Spring Application Context"を編集)

だから私のExampleApplicationスプリング設定を含むSpringApplicationContextの代わりに欠けているBeanも含みます。

SpringApplicationContext:

  • ExampleApplication.Java
  • MissingBeanClass.Java

etvoilà:エラーメッセージは消えた!

0
U.V.

Beanのパッケージが正しく書かれているか確認してください

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


import ...

@Service
class ServiceX {

  ...

}
0
Jöcker

アプリケーションコンテキストを設定すると、すべて問題ありません。

enter image description here

0

驚いたことに、Eclipseで正常に実行されたFeign指向のプロジェクトは、InteliJでは実行できませんでした。アプリケーションを起動したとき、InteliJはserviceImpl層に注入しようとしたFeignクライアントについて不平を言っていました。あなたの設定でタイプ....のBeanを定義することを検討してください。

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

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

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

0
ylev