春の@Component
SpringのComponentアノテーションは、クラスをComponentとして示すために使用されます。これは、Springフレームワークが、アノテーションベースの設定とクラスパススキャンを使用して依存関係の注入のためにこれらのクラスを自動的に検出することを意味します。
春のコンポーネント
素人の言葉で言えば、Componentは特定の操作を担当しています。Springフレームワークは、クラスをComponentとしてマーキングする際に使用する、さらに3つの特定のアノテーションを提供しています。
-
- サービス:クラスがいくつかのサービスを提供することを示します。私たちのユーティリティクラスはサービスクラスとしてマークされることがあります。
-
- リポジトリ:この注釈は、クラスがCRUD操作を扱うことを示しており、通常はデータベーステーブルを扱うDAOの実装と一緒に使用されます。
- コントローラー:主にWebアプリケーションやREST Webサービスと一緒に使用され、クラスがフロントコントローラーであり、ユーザーのリクエストを処理し適切な応答を返す責任があることを指定します。
これらの4つの注釈は、すべてorg.springframework.stereotypeパッケージにあり、spring-contextジャーの一部です。ほとんどの場合、コンポーネントクラスは3つの専門注釈のいずれかに含まれるため、@Component注釈をあまり使用しないかもしれません。
春のコンポーネントの例
次は、SpringのComponentアノテーションの使用とアノテーションベースの設定およびクラスパスのスキャンによるSpringの自動検出を示すために、非常にシンプルなSpring Mavenアプリケーションを作成しましょう。Mavenプロジェクトを作成し、次のSpring Coreの依存関係を追加してください。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
それが私たちがSpring Frameworkのコア機能を取得するために必要なすべてです。簡単なコンポーネントクラスを作成し、それに @Component の注釈を付けましょう。
package com.scdev.spring;
import org.springframework.stereotype.Component;
@Component
public class MathComponent {
public int add(int x, int y) {
return x + y;
}
}
今はアノテーションベースのSpringコンテキストを作成し、その中からMathComponentのBeanを取得することができます。
package com.scdev.spring;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SpringMainClass {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.scdev.spring");
context.refresh();
MathComponent ms = context.getBean(MathComponent.class);
int result = ms.add(1, 2);
System.out.println("Addition of 1 and 2 = " + result);
context.close();
}
}
通常のJavaアプリケーションとして上記のクラスを実行してください。すると、コンソールに以下の出力が表示されるはずです。
Jun 05, 2018 12:49:26 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 12:49:26 IST 2018]; root of context hierarchy
Addition of 1 and 2 = 3
Jun 05, 2018 12:49:26 PM org.springframework.context.support.AbstractApplicationContext doClose
INFO: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 12:49:26 IST 2018]; root of context hierarchy
@Component("mc")
public class MathComponent {
}
MathComponent ms = (MathComponent) context.getBean("mc");
MathComponentには@Componentアノテーションを使用していますが、実際にはサービスクラスであるため、@Serviceアノテーションを使用すべきです。結果は変わりません。
当社のGitHubリポジトリから、プロジェクトをチェックアウトすることができます。
参照:APIドキュメント