Springboot プログラムの記述では、@Component アノテーションが person に明確に追加されています。コンテナは、Person クラスの Bean オブジェクトが見つからないことを示しています。
従来の解決策をインターネットでいろいろ検索しましたが、どれもうまくいきませんでした。後で、パッケージのスキャンの問題ではないかと気づきました。当時のメインプログラムは、次のフォルダに置かれていました。デフォルトのパッケージ スキャン ルールに従って、メイン プログラムと同じ名前 - メイン プログラムが配置されているパッケージ内のクラスとそのすべてのサブパッケージをスキャンします。その場合、ドメイン パッケージの下にある person クラスは当然スキャンされません。 @Component がマークされていても、有効になりません。
メイン プログラムにコンポーネント アノテーションを追加します
@ComponentScan("com.example")
サンプルにあるすべてのパッケージを springboot で正常にスキャンできるようにすると、すべてが実行されます。問題解決
落とし穴を踏んでしまったインターフェースがありますこのインターフェースの実装クラスには @Autowired アノテーションを付ける必要があります使用しました。不注意でクラスを実装しませんでした。@Component アノテーションを追加すると、Spring がクラスが見つからないというエラーを報告します。
Spring に関するアノテーションがクラスに表示されたら、たとえば、実装クラスの @Autowired アノテーションとアノテーションが付けられたもの クラスは Spring コンテナから取り出され、呼び出される実装クラスも Spring コンテナで管理する必要があることに加え、 @Component
@Component("conversionImpl") //其实默认的spring中的Bean id 为 conversionImpl(首字母小写) public class ConversionImpl implements Conversion { @Autowired private RedisClient redisClient; }
開発中にこのアノテーションが発生することは避けられません@ Component
@Controller コントローラー (インジェクション サービス)
は、制御層をマークするために使用されます。 struts のアクション層に相当
#@ サービス サービス (dao への注入)
はサービス層をマークするために使用され、主にビジネス ロジックの処理に使用されます
@リポジトリ (dao アクセスの実装)
は、データ アクセス層をマークするために使用されます。または、データ アクセス コンポーネントをマークするために使用されるとも言えます。
@Component (通常の pojo を Spring コンテナーにインスタンス化します。構成ファイルに相当します)
一般的には、さまざまなコンポーネントを指します。つまり、クラスがさまざまな分類に属している場合 (@Controller、@Services などに属していない場合)、@Component を使用してこのクラスにアノテーションを付けることができます。
これは Spring mvc の applicationcontent.xml などの設定ファイル内の記述形式です。
Format:
<bean id="" class=""/>
Spring Boot では、ゼロ構成が使用されるため、クラスに @component アノテーションを直接追加するだけです。
以下に書くのは、コンポーネント スキャン コンポーネントを導入することです。
<context:component-scan base-package=”com.mmnc.*”>
上記example は、Component コンポーネントを導入する例です。base-package は、スキャンする必要があるすべてのサブパッケージを表します。
共通点:
@controller、@service、@repository、@component のアノテーションが付けられたクラスはすべて、管理用の Spring コンテナに含まれます
以上がSpringBoot @Componet アノテーション注入の失敗を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。