SpringのBeanNameAwareおよびBeanFactoryAwareインターフェース
1. 概要
このクイックチュートリアルでは、 SpringFrameworkのBeanNameAwareおよびBeanFactoryAwareインターフェースに焦点を当てます。
各インターフェースについて、その使用法の長所と短所とともに個別に説明します。
2. Awareインターフェース
BeanNameAwareとBeanFactoryAwareはどちらも、org.springframework.beans.factory.Awareルートマーカーインターフェースに属しています。 これは、セッターインジェクションを使用して、アプリケーションコンテキストの起動中にオブジェクトを取得します。
Awareインターフェースは、コールバック、リスナー、オブザーバーのデザインパターンを組み合わせたものです。 これは、Beanがコールバックメソッドを介してSpringコンテナから通知を受ける資格があることを示します。
3. BeanNameAware
BeanNameAwareは、コンテナで定義されたBean名をオブジェクトに認識させます。
例を見てみましょう:
public class MyBeanName implements BeanNameAware {
@Override
public void setBeanName(String beanName) {
System.out.println(beanName);
}
}
beanName プロパティは、Springコンテナに登録されているBeanIDを表します。 私たちの実装では、単にBean名を表示しています。
次に、このタイプのBeanをSpring構成クラスに登録しましょう。
@Configuration
public class Config {
@Bean(name = "myCustomBeanName")
public MyBeanName getMyBeanName() {
return new MyBeanName();
}
}
ここでは、 MyBeanName クラスに、 @Bean(name = “ myCustomBeanName”)行を使用して名前を明示的に割り当てています。
これで、アプリケーションコンテキストを開始し、そこからBeanを取得できます。
AnnotationConfigApplicationContext context
= new AnnotationConfigApplicationContext(Config.class);
MyBeanName myBeanName = context.getBean(MyBeanName.class);
予想どおり、 setBeanNameメソッドは“ myCustomBeanName”を出力します。
name =“…”コードを@Beanアノテーションから削除すると、この場合、コンテナは getMyBeanName()メソッド名をBeanに割り当てます。 したがって、出力は“ getMyBeanName”になります。
4. BeanFactoryAware
BeanFactoryAwareは、BeanFactoryオブジェクトを挿入するために使用されます。 このようにして、オブジェクトを作成したBeanFactoryにアクセスできます。
MyBeanFactoryクラスの例を次に示します。
public class MyBeanFactory implements BeanFactoryAware {
private BeanFactory beanFactory;
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
public void getMyBeanName() {
MyBeanName myBeanName = beanFactory.getBean(MyBeanName.class);
System.out.println(beanFactory.isSingleton("myCustomBeanName"));
}
}
setBeanFactory()メソッドを使用して、IoCコンテナからのBeanFactory参照をbeanFactoryプロパティに割り当てます。
その後、 getMyBeanName()関数のように直接使用できます。
MyBeanFactory を初期化し、 getMyBeanName()メソッドを呼び出しましょう。
MyBeanFactory myBeanFactory = context.getBean(MyBeanFactory.class);
myBeanFactory.getMyBeanName();
前の例でMyBeanNameクラスをすでにインスタンス化したので、Springはここで既存のインスタンスを呼び出します。
beanFactory.isSingleton( “myCustomBeanName”)行はそれを確認します。
5. いつ使用しますか?
BeanNameAware の一般的な使用例は、ロギングまたはワイヤリングの目的でBean名を取得することです。 BeanFactoryAware の場合、レガシーコードのSpringBeanを使用できる可能性があります。
ほとんどの場合、必要な場合を除いて、Awareインターフェイスの使用は避けてください。 これらのインターフェースを実装すると、コードがSpringフレームワークに結合されます。
6. 結論
この記事では、BeanNameAwareおよびBeanFactoryAwareインターフェースと、それらの実際の使用方法について学習しました。
いつものように、この記事の完全なコードは、GitHubでから入手できます。