ApplicationContextがorg.springframework.context.ApplicationContextAwareインターフェースを実装するオブジェクトインスタンスを作成するとき、インスタンスはApplicationContextへの参照を提供します。以下に、ApplicationContextAwareインターフェイスの定義を示します。
public interface ApplicationContextAware {
void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
}
したがって、Beanは独自のApplicationContextをプログラムで作成でき、ApplicationContextインターフェイスまたはこのインターフェイスのサブクラス(ConfigurableApplicationContextなど)への参照を介して追加の関数を公開できます。1つの用途は、プログラムで他のBeanを取得することです。この機能が役立つ場合があります。ただし、一般に、コードをSpringと結合し、他のメソッドのように依存関係を属性としてBeanに渡すIOCスタイルに従わないため、使用を避ける必要があります。ApplicationContextの他のメソッドは、ファイルリソースへのアクセスと解放を提供します。アプリケーションイベントとMessageResourceへのアクセス。これらの追加機能については、ApplicationContextの追加機能で説明しています。
Spring 2.5では、自動配線はApplicationContext参照を取得するためのもう1つのオプションです。「従来の」コンストラクターとbyType自動アセンブリモード(自動アセンブリで説明)は、それぞれコンストラクターパラメーターまたはセッターメソッドパラメーターのApplicationContextタイプの依存関係を提供できます。柔軟性を高めるために、自動アセンブリフィールドと複数のフィールドが含まれています。パラメータメソッドの機能については、新しい注釈ベースの自動配線機能を使用してください。この操作を実行すると、ApplicationContextは、関連するフィールド、コンストラクタ、またはメソッドを条件として、ApplicationContextタイプを必要とするフィールド、コンストラクタパラメータ、またはメソッドパラメータに自動的にアセンブルされます。@Autowiredで注釈が付けられています。詳細については、@ Autowiredの使用を参照してください。
ApplicationContextは、org.springframework.beans.factory.BeanNameaWareインターフェイスを実装するクラスを作成するときに、関連するオブジェクト定義で定義された名前への参照をクラスに提供します。次のリストは、BeanNameaWareインターフェイスの定義を示しています。
public interface BeanNameAware {
void setBeanName(String name) throws BeansException;
}
このメソッドは、通常のBeanプロパティを入力した後、初期化コールバック(Initializingbean、afterPropertieSset、カスタムinit-methodなど)の前にコールバックを呼び出します。Springは、ApplicationContextAwareとBeanNameAware(前述)に加えて、一連のAwareコールバックインターフェイスも提供して、Beanが何らかのインフラストラクチャの依存関係を必要としていることをコンテナに示すことができるようにします。原則として、名前は依存関係のタイプを示します。次の表は、最も重要なAwareインターフェイスをまとめたものです。
名前 |
依存性注入 |
ApplicationContextAware |
ApplicationContextを宣言します |
ApplicationEventPublishAware |
ApplicationContextイベントの公開をカプセル化する |
BeanClassLoaderAware |
Beanクラスをロードするためのクラスローダー |
BeanFactoryAware |
BeanFactoryを宣言する |
BeanNameAware |
Beanの名前を宣言します |
BootstrapContextAware |
コンテナが実行されるリソースアダプタBootstrapContext。通常、JCAをサポートするApplicationContextインスタンスでのみ使用できます。 |
LoadTimeWeaverAware |
ロード時に処理クラス定義用に定義されたウィーバーを定義します。 |
MessageSourceAware |
メッセージの解析に使用される構成戦略(パラメーター化と国際化をサポート) |
NotificationPublisherAware |
春のJMX発表 |
ResourceLoaderAware |
ローダーは、リソースへの低レベルのアクセス用に構成されています。 |
ServletConfigAware |
コンテナによって実行されている現在のServletconfig。Web対応のSpringApplicationContextでのみ有効です。 |
ServletContectAware |
コンテナが実行されている現在のServletContextコンテナ。Web対応のSpringApplicationContextでのみ有効です。 |
Springは多くのAwareインターフェースを提供します。上の表に示されているように、これらのAwareの用途は何ですか?以下では、Awareの使用について説明します。Awareは、Springが提供する一部のインターフェイスまたはクラスの機能を使用できるように提供されています。例としてApplicationContextAwareを取り上げましょう。ApplicationContextを使用する場合は、定義されたクラスにApplicationContextAwareインターフェイスを実装できます。コードは次のとおりです。
@Component
public class ApplicationContextAwareBean implements ApplicationContextAware {
//ApplicationContext实例会在ApplicationContextAwareBean 实例化时通过
//下面的setApplicationContext方法赋值
//我们在该类可以使用ApplicationContext实例提供的任何功能
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
ApplicationContextAwareに加えて、ApplicationEventPublisherインスタンスを設定するApplicationEventPublisherAwareインターフェイスを実装することもできます。コードは次のとおりです。ApplicationEventPublisherインスタンスを介してイベントを公開できます。詳細については、ブログSpringイベント処理メカニズム-ApplicationEventを参照してください。
public interface ApplicationEventPublisherAware extends Aware {
void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher);
}