IntelliJ IDEAは、クラスでSpringの@Autowired
注釈を使用するとエラーを表示しますが、クラスは問題なく機能しています。
このエラーメッセージは次のとおりです。
自動配線メンバーは、有効なSpring Bean(@ Component/@ Serviceなど)で定義する必要がありますless ...(Ctrl + F1)Beanクラスの自動配線の問題をチェックします。
IntelliJ IDEA 13.1.4でも同じ問題が発生しました。Springファセット([ファイル]-> [プロジェクト構造])を削除し、「検出」と表示するだけで解決しました。
Beanが存在し、検査の問題であることがわかっている場合は、変数宣言の前に次を追加します。
@SuppressWarnings("SpringJavaAutowiringInspection")
@Inject MyClass myVariable;
Beanが条件付きで含まれ、実行時に条件解決が行われるなど、Beanが宣言されている場合、IntelliJが解決できない場合があります。
ここで同じエラーが発生しました!
Intellijは、クラスの実装が@Serviceまたは@Componentであるかどうかを確認できないようです。
エラーから警告に変更するだけで解決します(Alt + Enterを押します)。
すべてのプロジェクトモジュールから.imlファイルを削除し、次に[ファイル]-> [キャッシュの無効化/再起動]に移動します。
ファイル-> ProjectStructure->モジュール-> +(中央の列)-> Spring-> OK
抑制警告を追加して修正しました:
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
private ....
同じ問題がありました。関連する各モジュールにSpringファセット([ファイル]-> [プロジェクト構造])を追加し、構成ファイルを追加して解決しました。一部のプロジェクト(spring mvc)では、構成ファイルが自動的に検出されます。ただし、jarプロジェクトの場合、構成ファイルを手動で追加する必要がありました。
Spring Beanの定義が正しいことを確認してください。アプリケーションが正常に動作する場合がありますが、IDEにエラーが表示されるだけで、Springファセットが定義されている場合はプロジェクトの「iml」ファイルを確認してください。
IntelliJ Idea(IDE)が、モジュールが検査される必要なすべてのスプリング構成を認識していることを確認してください。
これを確認できます
ファイル>プロジェクト構造>モジュール> [右パネルのプロジェクト名]> Spring
場合によっては、IDEに、スプリング構成が依存関係(プロジェクトクラスパスに存在するjar)からのものであることを明示的に伝える必要があります。
[ファイル] >> [プロジェクト構造] >> [ファセット]に移動し、すべての構成ファイルをSpringファセットに追加することで問題を解決しました。その後、Beanが存在するファイルの検出を開始し、問題をソートできました。このチェックを行うIntelliJは非常に価値があり、IMHOを無効にしないでください。
私もこの問題を抱えていました。やること alt+enter その後、影響を受けた行でSpring検査を再実行または無効にするように要求すると、修正されました。これは、13.4アップデート後にのみ問題になったようです。
可視性の問題のようです-配線しようとしているコンポーネントが親コントローラーに表示されません。
追加してみてください
@ComponentScan("path to respective Component")
親コントローラーに。
クラスに@ Component、@ Repositoryなどが追加されているかどうかを確認する必要があります
私は私のCrudRepositoryインターフェースに@Repositoryを追加しないためのものであり、私が見ていたチュートリアルはSTSに追加せず、文句を言いませんでした。
私の場合、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アイコンが左マージンに表示されたら:
同じ問題が発生しました。私の理由は、自動配線された参照を含むBeanがSpringコンポーネントではなく(EJBでした)、SpringBeanAutowiringInterceptor Interceptorを取得して自動配線の使用を許可したためです。 Intellijは自動配線検査でこの可能性を考慮していないと思います。
@QualifierでBeanを注入することで問題が解決しました。
eg1:
director:Settings - 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 {
同様の問題がありました。 「明示的に注釈を付けたBeanを処理する」オプションのチェックを外して解決しました(下のスクリーンショットを参照)。このオプションは、Linuxではデフォルトで有効になっています。 @Serviceおよび@Configurationsアノテーションが表示されるようになりました。 スクリーンショット
Webファセットを追加することで解決しました。
少し遅れましたが、他の人に役立つことを願っています。
サービスの実装クラスに必ず@Serviceを配置してください
@Service
public class ServiceNameImpl implements ServiceName {
@Override
public void method(ObjectType paramName) {
//CODE
}
}
それは私がエラーを修正した方法です。
この方法でこの問題を解決しました。 IntelliJでは、すべてのパッケージがmain/Javaのサブパッケージであるサブパッケージに含まれている必要があります。たとえば、すべてのパッケージをsrc/main/Java/com.misisol.watchStore /の下に置いたので、Springはその後Beanを見つけることができました。