私は簡単な単体テストを作成しましたが、IntelliJは間違って赤く強調表示しています。エラーとしてマークする
豆じゃない?
あなたが下で見ることができるように、それはテストに合格しますか?それではAutowiredに違いありませんか?
@SpringBootApplication
アノテーションを使ってSpring Bootアプリケーションを作成するときにも同じ問題がありました。このアノテーションは spring reference に従って@Configuration
、@EnableAutoConfiguration
および@ComponentScan
を表します。
予想通り、新しいアノテーションは正しく機能し、私のアプリケーションはスムーズに動作しましたが、Intellijは満たされていない@Autowire
依存関係について不満を言い続けました。 @Configuration
、@EnableAutoConfiguration
、および@ComponentScan
を別々に使用するように変更した直後に、エラーはなくなりました。 Intellij 14.0.3(そしておそらく以前のバージョンも)はまだ@SpringBootApplication
アノテーションを認識するように設定されていません。
今のところ、エラーがそれほどあなたに邪魔をするなら、それからそれらの3つの別々の注釈に戻ってください。そうでなければ、Intellijを無視してください。テストにパスしたので、依存関係の解決は正しく設定されています。
常に覚えています...
男はいつも機械よりも大きい。
リポジトリクラスに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
@ComponentScanがコンポーネントをスキャンする場所を指定する必要がある場合があります。あなたは、このアノテーションのパラメータとしてパッケージを渡すことによってそうすることができます、例えば:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
ただし、既に述べたように、@ SpringSootApplicationアノテーションは@ComponentScanに置き換わるため、そのような場合は同じことを行う必要があります。
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
少なくとも私の場合、Intellijは文句を言うのをやめた。
私はspring-boot 2.0とintellij 2018.1.1 ultimate editionを使っています、そして私は同じ問題に直面しました。
メインアプリケーションクラスに@EnableAutoConfigurationを配置することで解決しました
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
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");
}
}
テストに合格している限り、alt + enter
をヒットします。カーソルをエラーに合わせ、最初の項目のサブメニュー内でDisable Inspection
を選択します。
重要な情報の最後の1つ - ComponentScan
を追加して、アプリがワイヤリングする必要があることを認識できるようにします。これはこの質問の場合には関係ありません。ただし、@autowiring
がまったく実行されていない場合は、これがおそらく解決策です。
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
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"
など。
Spring Bootアプリケーションでも同様の問題がありました。アプリケーションはFeign(注釈付きインターフェースからのHTTPクライアント合成要求)を利用します。インタフェースSomeClient
に@FeignClient
のアノテーションを付けて、Feignはこのインタフェースを実装する実行時プロキシクラスを生成します。 SpringコンポーネントがSomeClient
型のBeanを自動配線しようとすると、実際にはクラスが実際にプロジェクトに存在せず、Ideaが@FeignClient
アノテーションを理解するように教えられていないため、IdeaはSomeClient
型のBeanを見つけられません。
解決策:インタフェースSomeClient
に@Component
でアノテーションを付けてください。 (私たちの場合、SomeClient
に@FeignClient
アノテーションを直接使用するのではなく、@OurProjectFeignClient
アノテーションを付けたメタアノテーション@FeignClient
を使用し、それに@Component
アノテーションを追加しても同様に機能します。)
アプリケーションにも同様の問題がありました。注釈を追加すると、誤った強調表示が消えました。
@ContextConfiguration(classes = {...})
私にとっての解決策は、@EnableAutoConfiguration
をApplicationクラスの@SpringBootApplication
の下に配置することです。それを削除して、行方不明の豆に関する警告がすべて消えます。愚かな春...
私の場合、@ Autowiredにしようとしていたディレクトリは同じレベルではありませんでした。
同じ構造レベルで設定した後、エラーが消えました
それが何かを助けることを願っています!
この作業を行うために必要なのは、次のコードだけです。
@ComponentScan
public class PriceWatchTest{
@Autowired
private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}
対処するには@EnableAutoConfigurationを使用するだけでしたが、このエラーによる機能への影響はありません。
これはまだ最新のIntelliJのバグであり、キャッシュの問題と関係がありますか?
@Repositoryアノテーションを上記のmk321として追加し、保存してから削除してから再度保存すると、問題が解決します。
サービスクラスで@Serviceアノテーションを見逃していないかどうかを確認してください。これは私にとってそうでした。
スプリングブートアプリケーションのメインクラスに@EnableAutoConfigurationを配置することで解決できます。
テストクラスには@AutoConfigureMockMvcを使用します。
時々 - 私の場合はそうです - その理由は間違ったインポートです。誤って輸入した
import org.jvnet.hk2.annotations.Service
の代わりに
import org.springframework.stereotype.Service
アイデアの提案された輸入品の最初の選択を盲目的に受け入れることによって。それが最初に起こった時に私に数分かかりました:-)
私のSpring Bootアプリケーションにおけるこの問題に対する私の解決策は、Springアプリケーションのコンテキストを開いて、足りないautowired beanのクラスを手動で追加することでした!
([プロジェクト構造]メニューまたはSpringツールウィンドウからアクセス... "Spring Application Context"を編集)
だから私のExampleApplicationスプリング設定を含むSpringApplicationContextの代わりに欠けているBeanも含みます。
SpringApplicationContext:
etvoilà:エラーメッセージは消えた!
Beanのパッケージが正しく書かれているか確認してください
//Check if this is written right
package com.package1.package2.package3
import ...
@Service
class ServiceX {
...
}
驚いたことに、Eclipseで正常に実行されたFeign指向のプロジェクトは、InteliJでは実行できませんでした。アプリケーションを起動したとき、InteliJはserviceImpl層に注入しようとしたFeignクライアントについて不平を言っていました。あなたの設定でタイプ....のBeanを定義することを検討してください。
何が悪いのかを理解しようとして長い時間を浪費しました。私は完全に理解していない(InteliJのための)解決策を見つけました:
またはEclipseを選択してください:)