クラス CommonAnnotationBeanPostProcessor

java.lang.ObjectSE
org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor
実装されたすべてのインターフェース:
SerializableSEBeanRegistrationAotProcessorAwareBeanFactoryAwareBeanPostProcessorDestructionAwareBeanPostProcessorInstantiationAwareBeanPostProcessorMergedBeanDefinitionPostProcessorOrderedPriorityOrdered

public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBeanPostProcessor implements InstantiationAwareBeanPostProcessor, BeanFactoryAware, SerializableSE
すぐに使える一般的な Java アノテーション、特に jakarta.annotation パッケージの一般的なアノテーションをサポートする BeanPostProcessor 実装。これらの一般的な Java アノテーションは、多くの Jakarta EE テクノロジ (JSF や JAX-RS など) でサポートされています。

このポストプロセッサーには、PostConstructEE アノテーションと PreDestroyEE アノテーションのサポートが含まれています。それぞれ、init アノテーションと destroy アノテーションとして、事前設定されたアノテーション型を使用して InitDestroyAnnotationBeanPostProcessor から継承します。

中心的な要素は、デフォルトでは、ZN で解決される mappedName 参照のみを含む、Spring BeanFactory を含む、名前付き Bean のアノテーション駆動型注入のための ResourceEE アノテーションです。"alwaysUseJndiLookup" flag は、name 参照およびデフォルト名にも標準の Jakarta EE リソースインジェクションと同等の JNDI ルックアップを適用します。ターゲット Bean は単純な POJO にすることができ、型が一致する必要があること以外に特別な要件はありません。

さらに、JSR-250 仕様に遡るアノテーションの元の javax.annotation バリアント (Java EE 5-8、これも JDK 6 ~ 8 に含まれます) も引き続きサポートされます。これは主にスムーズなアップグレードパスを目的としたものであり、新しいアプリケーションでの採用を目的としたものではないことに注意してください。

このポストプロセッサーは、ResourceEE に類似した EJB EJBEE アノテーションもサポートしており、フォールバック取得のためにローカル Bean 名とグローバル JNDI 名の両方を指定する機能を備えています。この場合、ターゲット Bean はプレーン POJO だけでなく EJB セッション Bean にすることもできます。

デフォルトの使用箇所では、リソース名を Spring Bean 名として解決するには、アプリケーションコンテキストで次のように定義するだけです。

 <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
直接 JNDI アクセスの場合、Jakarta EE アプリケーションの "java:comp/env/" 名前空間内の JNDI リソース参照としてリソース名を解決するには、以下を使用します。
 <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
   <property name="alwaysUseJndiLookup" value="true"/>
 </bean>
mappedName 参照は常に JNDI で解決されるため、グローバル JNDI 名( "java:" 接頭辞を含む)も使用できます。"alwaysUseJndiLookup" フラグは、name 参照とデフォルト名(フィールド名 / プロパティ名から推測)にのみ影響します。

注意 : デフォルトの CommonAnnotationBeanPostProcessor は、"context:annotation-config" および "context:component-scan" XML タグによって登録されます。カスタム CommonAnnotationBeanPostProcessor Bean 定義を指定する場合は、デフォルトのアノテーション設定を削除するかオフにしてください!

:XML インジェクションの前にアノテーションインジェクションが実行されます。後者の構成は、両方のアプローチで接続されたプロパティの前者をオーバーライドします。

導入:
2.5
作成者:
Juergen Hoeller, Sam Brannen
関連事項:
  • コンストラクターの詳細

    • CommonAnnotationBeanPostProcessor

      public CommonAnnotationBeanPostProcessor()
      init および destroy アノテーション型をそれぞれ PostConstructEE および PreDestroyEE に設定して、新しい CommonAnnotationBeanPostProcessor を作成します。
  • メソッドの詳細

    • ignoreResourceType

      public void ignoreResourceType(StringSE resourceType)
      @Resource アノテーションを解決するときに、指定されたリソース型を無視します。
      パラメーター:
      resourceType - 無視するリソース型
    • setFallbackToDefaultTypeMatch

      public void setFallbackToDefaultTypeMatch(boolean fallbackToDefaultTypeMatch)
      明示的な名前が指定されていない場合、型の一致へのフォールバックを許可するかどうかを設定します。デフォルト名(つまり、フィールド名または Bean プロパティ名)が最初にチェックされます。その名前の Bean が存在する場合、それが使用されます。ただし、その名前の Bean が存在しない場合、このフラグが "true" の場合、依存関係の型ごとの解決が試行されます。

      デフォルトは "true" です。すべてのケースで名前によるルックアップを適用するには、このフラグを "false" に切り替え、名前が一致しない場合は例外をスローします。

      関連事項:
    • setAlwaysUseJndiLookup

      public void setAlwaysUseJndiLookup(boolean alwaysUseJndiLookup)
      name 属性とデフォルト名であっても、標準の Jakarta EE リソースインジェクションと同等の JNDI ルックアップを常に使用するかどうかを設定します

      デフォルトは「false」: リソース名は、含まれている BeanFactory の Spring Bean ルックアップに使用されます。mappedName 属性のみが直接 JNDI を指します。name 属性とデフォルト名であっても、Jakarta EE スタイルの JNDI ルックアップを強制するには、このフラグを "true" に切り替えます。

      関連事項:
    • setJndiFactory

      public void setJndiFactory(BeanFactory jndiFactory)
      JNDI を直接指す mappedName 属性について@Resource / @EJB アノテーション付きフィールドおよび setter メソッドに注入されるオブジェクトのファクトリを指定します。このファクトリは、name 属性およびデフォルト名に対しても JNDI ルックアップを強制するために、"alwaysUseJndiLookup" が "true" に設定されている場合にも使用されます。

      デフォルトは、標準の Jakarta EE リソースインジェクションと同等の JNDI ルックアップ動作の SimpleJndiBeanFactory です。

      関連事項:
    • setResourceFactory

      public void setResourceFactory(BeanFactory resourceFactory)
      name 属性とデフォルト名について@Resource / @EJB アノテーション付きフィールドと setter メソッドに注入されるオブジェクトのファクトリを指定します。

      デフォルトは、このポストプロセッサーが定義されている BeanFactory であり、リソース名を Spring Bean 名として検索します。このポストプロセッサーをプログラムで使用するには、リソースファクトリを明示的に指定します。

      Spring の SimpleJndiBeanFactory を指定すると、name 属性とデフォルト名であっても、標準の Jakarta EE リソースインジェクションと同等の JNDI ルックアップ動作が発生します。これは、"alwaysUseJndiLookup" フラグが有効にする動作と同じです。

      関連事項:
    • setBeanFactory

      public void setBeanFactory(BeanFactory beanFactory)
      インターフェースからコピーされた説明: BeanFactoryAware
      所有ファクトリを Bean インスタンスに提供するコールバック。

      通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet() またはカスタム init-method などの初期化コールバックの前に呼び出されます。

      次で指定:
      インターフェース BeanFactoryAwaresetBeanFactory 
      パラメーター:
      beanFactory - 所有 BeanFactory(非 null)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。
      関連事項:
    • postProcessMergedBeanDefinition

      public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, ClassSE<?> beanType, StringSE beanName)
      インターフェースからコピーされた説明: MergedBeanDefinitionPostProcessor
      指定された Bean の指定されたマージ済み Bean 定義を後処理します。
      次で指定:
      インターフェース MergedBeanDefinitionPostProcessorpostProcessMergedBeanDefinition 
      オーバーライド:
      クラス InitDestroyAnnotationBeanPostProcessorpostProcessMergedBeanDefinition 
      パラメーター:
      beanDefinition - Bean のマージされた Bean 定義
      beanType - 管理対象 Bean インスタンスの実際の型
      beanName - Bean の名前
      関連事項:
    • processAheadOfTime

      @Nullable public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean)
      インターフェースからコピーされた説明: BeanRegistrationAotProcessor
      指定された RegisteredBean インスタンスを事前に処理し、コントリビューションまたは null を返します。

      プロセッサーは、任意の手法を自由に使用して、特定のインスタンスを分析できます。ほとんどの場合、リフレクションを使用して、コントリビューションで使用するフィールドまたはメソッドを見つけます。コントリビューションは通常、AOT 最適化アプリケーションの実行時に使用できるソースコードまたはリソースファイルを生成します。

      指定されたインスタンスがプロセッサーに関連していない場合は、null コントリビューションを返す必要があります。

      次で指定:
      インターフェース BeanRegistrationAotProcessorprocessAheadOfTime 
      オーバーライド:
      クラス InitDestroyAnnotationBeanPostProcessorprocessAheadOfTime 
      パラメーター:
      registeredBean - 処理する登録済み Bean
      戻り値:
      BeanRegistrationAotContribution または null
    • resetBeanDefinition

      public void resetBeanDefinition(StringSE beanName)
      インターフェースからコピーされた説明: MergedBeanDefinitionPostProcessor
      指定された名前の Bean 定義がリセットされ、このポストプロセッサーが影響を受ける Bean のメタデータをクリアする必要があるという通知。

      デフォルトの実装は空です。

      次で指定:
      インターフェース MergedBeanDefinitionPostProcessorresetBeanDefinition 
      パラメーター:
      beanName - Bean の名前
      関連事項:
    • postProcessBeforeInstantiation

      @Nullable public ObjectSE postProcessBeforeInstantiation(ClassSE<?> beanClass, StringSE beanName)
      インターフェースからコピーされた説明: InstantiationAwareBeanPostProcessor
      ターゲット Bean がインスタンス化される前に、この BeanPostProcessor を適用します。返される Bean オブジェクトは、ターゲット Bean の代わりに使用するプロキシであり、ターゲット Bean のデフォルトのインスタンス化を効果的に抑制します。

      このメソッドによって null 以外のオブジェクトが返された場合、Bean 作成プロセスは短絡されます。適用される追加の処理は、構成された BeanPostProcessors からの BeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String) コールバックのみです。

      このコールバックは、Bean クラスを持つ Bean 定義、および返された Bean 型がここに渡されるファクトリメソッド定義に適用されます。

      ポストプロセッサーは、ここで返される Bean オブジェクトの型を予測するために、拡張 SmartInstantiationAwareBeanPostProcessor インターフェースを実装できます。

      デフォルトの実装は null を返します。

      次で指定:
      インターフェース InstantiationAwareBeanPostProcessorpostProcessBeforeInstantiation 
      パラメーター:
      beanClass - インスタンス化される Bean のクラス
      beanName - Bean の名前
      戻り値:
      ターゲット Bean のデフォルトのインスタンスの代わりに公開する Bean オブジェクト、またはデフォルトのインスタンス化を続行する null 
      関連事項:
    • postProcessAfterInstantiation

      public boolean postProcessAfterInstantiation(ObjectSE bean, StringSE beanName)
      インターフェースからコピーされた説明: InstantiationAwareBeanPostProcessor
      コンストラクターまたはファクトリメソッドを介して Bean がインスタンス化された後、Spring プロパティの設定(明示的なプロパティまたはオートワイヤーから)が発生する前に操作を実行します。

      これは、Spring のオートワイヤーが開始される直前の、指定された Bean インスタンスでカスタムフィールドインジェクションを実行するための理想的なコールバックです。

      デフォルトの実装は true を返します。

      次で指定:
      インターフェース InstantiationAwareBeanPostProcessorpostProcessAfterInstantiation 
      パラメーター:
      bean - プロパティがまだ設定されていない状態で作成された Bean インスタンス
      beanName - Bean の名前
      戻り値:
      Bean でプロパティを設定する必要がある場合は true。プロパティの入力をスキップする必要がある場合は false。通常の実装では true を返します。false を返すと、後続の InstantiationAwareBeanPostProcessor インスタンスがこの Bean インスタンスで呼び出されなくなります。
      関連事項:
    • postProcessProperties

      public PropertyValues postProcessProperties(PropertyValues pvs, ObjectSE bean, StringSE beanName)
      インターフェースからコピーされた説明: InstantiationAwareBeanPostProcessor
      ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。

      デフォルトの実装は、指定された pvs をそのまま返します。

      次で指定:
      インターフェース InstantiationAwareBeanPostProcessorpostProcessProperties 
      パラメーター:
      pvs - ファクトリが適用しようとしているプロパティ値 (非 null)
      bean - Bean インスタンスは作成されましたが、そのプロパティはまだ設定されていません
      beanName - Bean の名前
      戻り値:
      指定された Bean に適用する実際のプロパティ値(渡された PropertyValues インスタンスにすることができます)、またはプロパティの入力をスキップする null 
    • processInjection

      public void processInjection(ObjectSE bean) throws BeanCreationException
      任意のターゲットインスタンスを直接呼び出すためのネイティブ処理メソッド。サポートされている「リソース」アノテーション型のいずれかでアノテーションが付けられたすべてのフィールドとメソッドを解決します。
      パラメーター:
      bean - 処理するターゲットインスタンス
      例外:
      BeanCreationException - リソースインジェクションが失敗した場合
      導入:
      6.1.3
    • buildLazyResourceProxy

      protected ObjectSE buildLazyResourceProxy(CommonAnnotationBeanPostProcessor.LookupElement element, @Nullable StringSE requestingBeanName)
      指定された名前と型の遅延解決リソースプロキシを取得し、メソッド呼び出しが入るとオンデマンドで getResource(org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.LookupElement, java.lang.String) に委譲します。
      パラメーター:
      element - アノテーション付きフィールド / メソッドの記述子
      requestingBeanName - リクエストしている Bean の名前
      戻り値:
      リソースオブジェクト (非 null)
      導入:
      4.2
      関連事項:
    • getResource

      指定された名前と型のリソースオブジェクトを取得します。
      パラメーター:
      element - アノテーション付きフィールド / メソッドの記述子
      requestingBeanName - リクエストしている Bean の名前
      戻り値:
      リソースオブジェクト (非 null)
      例外:
      NoSuchBeanDefinitionException - 対応するターゲットリソースが見つからない場合
    • autowireResource

      protected ObjectSE autowireResource(BeanFactory factory, CommonAnnotationBeanPostProcessor.LookupElement element, @Nullable StringSE requestingBeanName) throws NoSuchBeanDefinitionException
      指定されたファクトリに基づいたオートワイヤーを介して、指定された名前と型のリソースオブジェクトを取得します。
      パラメーター:
      factory - オートワイヤーするファクトリ
      element - アノテーション付きフィールド / メソッドの記述子
      requestingBeanName - リクエストしている Bean の名前
      戻り値:
      リソースオブジェクト (非 null)
      例外:
      NoSuchBeanDefinitionException - 対応するターゲットリソースが見つからない場合