1概要

このクイックチュートリアルでは、

Spring Framework



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コンテナに登録されているBeanのIDを表します。この実装では、単にBean名を表示しているだけです。

次に、このタイプのBeanをSpring設定クラスに登録しましょう。

@Configuration
public class Config {

    @Bean(name = "myCustomBeanName")
    public MyBeanName getMyBeanName() {
        return new MyBeanName();
    }
}

ここでは、

@ Bean(name

=

“ myCustomBeanName”)

行を使用して

MyBeanName

クラスに名前を明示的に割り当てました。

これでアプリケーションコンテキストを起動し、そこからBeanを取得できます。

AnnotationConfigApplicationContext context
  = new AnnotationConfigApplicationContext(Config.class);

MyBeanName myBeanName = context.getBean(MyBeanName.class);

予想通り、

setBeanName

メソッドは

“ myCustomBeanName”

を出力します。


@ Bean

アノテーションから

name =“ …​”

コードを削除すると、コンテナはこの場合、

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();

前の例で

M​​yBeanName

クラスをすでにインスタンス化したので、Springはここで既存のインスタンスを呼び出します。


beanFactory.isSingleton(“ myCustomBeanName”)

行はそれを検証します。

** 5いつ使う?


BeanNameAware

の一般的なユースケースは、ロギングまたは配線の目的でBean名を取得することです。

BeanFactoryAware

の場合、それはレガシーコードからのSpring Beanを使用することができるかもしれません。

ほとんどの場合、必要でない限り、

Aware

インターフェースの使用を避けるべきです。これらのインタフェースを実装することで、コードをSpringフレームワークに結合します。


6. 結論

この記事では、

BeanNameAware

および

BeanFactoryAware

インターフェース、およびそれらを実際に使用する方法について学びました。

いつものように、この記事の完全なコードはhttps://github.com/eugenp/tutorials/tree/master/spring-core[over on GitHub]にあります。