簡単な単体テストを作成しましたが、IntelliJが誤って赤で強調表示しています。エラーとしてマークする
豆なし?
以下を見るとわかるように、テストに合格していますか?だからそれは自動配線されている必要がありますか?
簡単な単体テストを作成しましたが、IntelliJが誤って赤で強調表示しています。エラーとしてマークする
豆なし?
以下を見るとわかるように、テストに合格していますか?だからそれは自動配線されている必要がありますか?
回答:
アノテーションを使用してSpring Bootアプリケーションを作成するときにも同じ問題が発生しました@SpringBootApplication
。この注釈は、を表し@Configuration
、@EnableAutoConfiguration
そして@ComponentScan
に従ってスプリング参照。
予想どおり、新しい注釈は適切に機能し、アプリケーションはスムーズに実行されましたが、Intellijは@Autowire
依存関係が満たされていないことについて不平を言い続けました。を使用するように変更するとすぐ@Configuration
に@EnableAutoConfiguration
、@ComponentScan
個別にエラーが発生しなくなりました。そうですのIntelliJ 14.0.3(あまりにも、最も可能性の高い、それ以前のバージョン)がまだ認識するように構成されていない@SpringBootApplication
注釈を。
とりあえず、エラーがそれほど気にならない場合は、これら3つの個別のアノテーションに戻ってください。それ以外の場合は、Intellijを無視してください。テストに合格したため、依存関係の解決は正しく構成されています。
常に覚えています...
人は常に機械よりも優れています。
@SpringBootApplication
このエラーが発生しました。@JaのMatosのアドバイスに従い、scanBasePackages
パラメーターを使用して、@SpringBootApplication
スキャンする必要があるパッケージ/名前空間を指定しました。
@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
IntelliJ IDEA Ultimate(2016.3.4 Build 163)の私のバージョンはこれをサポートしているようです。コツは、Spring Dataプラグインを有効にする必要があることです。
@ComponentScanがコンポーネントをスキャンする場所を指定する必要がある場合があります。これを行うには、パッケージをこのアノテーションのパラメータとして渡します。例:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
ただし、すでに述べたように、@ SpringBootApplicationアノテーションは@ComponentScanに取って代わります。そのため、そのような場合は同じことを行う必要があります。
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
少なくとも私の場合、Intellijは文句を言うのをやめました。
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
、アプリは正常に動作しましたが、intellijはそれが気に入らなかった。@SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
修正済みに変更されました!
Spring-Boot 2.0とIntellij 2018.1.1 Ultimate Editionを使用していますが、同じ問題に直面しました。
メインアプリケーションクラスに@EnableAutoConfigurationを配置することで解決しました
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯\ _(ツ)_ /¯
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");
}
}
IDEを満足させるためだけにコードを変更したくない場合。Springファセットにすべてのコンポーネントを追加することで解決しました。
テストに合格している限り、問題はありません。alt + enter
エラーの上にカーソルを置くと、最初の項目のサブメニュー内でDisable Inspection
選択できます。
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
)パッケージ。
そして最後の重要な情報- ComponentScan
アプリが配線する必要があることをアプリが認識できるように追加します。これは、この質問の場合には関係ありません。ただし、何@autowiring
も実行されていない場合は、これがおそらくソリューションです。
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
あなたがする必要があるのは追加です
@ComponentScan("package/include/your/annotation/component")
の中でAppConfiguration.java
。
あなたAppConfiguraion.java
ののパッケージは注釈コンポーネント(@Service、@Component ...)のパッケージよりも深いと思うので、
など"package/include/your/annotation/component/deeper/config"
。
アプリケーションにも同様の問題がありました。アノテーションを追加すると、誤ったハイライトが消えました。
@ContextConfiguration(classes = {...})
このアノテーションを使用して、IntelliJ v.14で表示されるときにこのエラーを非表示にしています。
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
私にとっての解決策は@EnableAutoConfiguration
、Applicationクラスに配置@SpringBootApplication
することでした。その下線は冗長であるためです。それを削除して、欠けている豆に関する警告をすべて消してください!愚かな春...
私の春のブートアプリケーションでこの問題を解決するには、春のアプリケーションコンテキストを開いて、不足しているautowired Beanのクラスを手動で追加します。
(プロジェクト構造メニューまたはスプリングツールウィンドウからアクセス...「スプリングアプリケーションコンテキスト」を編集)
したがって、SpringApplicationContextの代わりに、私のExampleApplicationスプリング構成だけが含まれていますが、不足しているBeanも含まれています。
SpringApplicationContext:
etvoilà:エラーメッセージが消えました!
時々-私の場合は-理由は間違ったインポートです。誤ってインポートした
import org.jvnet.hk2.annotations.Service
の代わりに
import org.springframework.stereotype.Service
Ideaが提案するインポートの最初の選択を盲目的に受け入れることによって。それが最初に起こったときに私に数分かかった:-)
驚いたことに、Eclipseで正常に実行されたFeign指向のプロジェクトはInteliJでは実行できませんでした。アプリケーションを開始すると、InteliJは、serviceImplレイヤーに注入しようとしたFeignクライアントについて次のように文句を言いました。構成でタイプ '....'のBeanを定義することを検討してください。
何が悪いのかを理解しようとして、長い時間を無駄にしました。私は完全には理解していない解決策(InteliJ用)を見つけました:
またはEclipseを選択してください:)
テストクラスには@AutoConfigureMockMvcを使用します。
2つのステップを実行する必要がある単純な
==>> change @Autowired to @Resource
IntelliJ IDEA Ultimate
メインクラスをIntelliJ Springアプリケーションコンテキストに追加します(例:Application.java)。
File
-> Project Structure..
左側:プロジェクト設定->モジュール
右側:パッケージ構造で見つけて
Spring
追加+
Application.java