アノテーションによるBean利用は、いろいろと応用ができます。基本がわかったら、続いてBeanを利用する「
コンポーネント」を使ってみましょう。
Spring Frameworkでは、高度な機能を持ったクラスを
コンポーネントとして定義し、Beanと同じような感覚で利用できます。簡単なサンプルとして、「
BeanHolder」というコンポーネントクラスを作ってみましょう。
com.tuyano.libroパッケージに、
BeanHolderクラスを作成し、下の掲載するようにソースコードを記述して下さい。
この
BeanHolderは、ごくシンプルなコンポーネントです。このコンポーネント内では、先ほどのBean設定クラスで用意したBeanをフィールドに保管しており、それを利用したメソッドが用意されています。ポイントを整理していきましょう。
1. 「@Component」アノテーションクラスの宣言の手前には、
@Componentというアノテーションがつけられています。これは、そのクラスが
コンポーネントであることを示すためのものです。コンポーネントクラスには必ずこれを付けておきます。
2. 「@Autowired」アノテーションこのクラスには、
SampleBeanInterfaceをフィールドに保管しています。このフィールドには、
@Autowiredというアノテーションがつけられています。これは、Bean設定クラス(あるいはファイル)によって自動生成されたBeanインスタンスを自動的にバインドするためのものです。
これをつけることで、生成されたBean群の中から
SampleBeanInterfaceインスタンスのものを探してこのbeanフィールドに自動的に代入するのです。この
@Autowairedは、コンポーネントに限らず、さまざまなBean利用シーンで用いられます。
■SampleBeanConfigクラスの修正
これでコンポーネントは完成ですが、実はもう1つだけやっておくことがあります。Bean設定クラス(
SampleBeanConfig)の宣言の手前に、以下のアノテーションを追加して下さい。
@ComponentScan
既に
@Configurationアノテーションが付けられていますから、その上か下に追加すればいいでしょう。
この
@ComponentScanは、コンポーネントを検索しインスタンスを作成して
ApplicationContextに登録するためのものです。コンポーネント(
@Componentを付けたクラス)を利用する場合には、設定クラスに必ずこれを用意します。これにより、コンポーネントが自動的にインスタンス化され利用できるようになります。