クラス CommonAnnotationBeanPostProcessor
- 実装されたすべてのインターフェース:
SerializableSE
、BeanRegistrationAotProcessor
、Aware
、BeanFactoryAware
、BeanPostProcessor
、DestructionAwareBeanPostProcessor
、InstantiationAwareBeanPostProcessor
、MergedBeanDefinitionPostProcessor
、Ordered
、PriorityOrdered
jakarta.annotation
パッケージ内の一般的なアノテーションをサポートする BeanPostProcessor
実装。これらの一般的な Java アノテーションは、多くの Jakarta EE テクノロジー (JSF や JAX-RS など) でサポートされています。 このポストプロセッサーには、PostConstruct
EE アノテーションと PreDestroy
EE アノテーションのサポートが含まれています。それぞれ、init アノテーションと destroy アノテーションとして、事前設定されたアノテーション型を使用して InitDestroyAnnotationBeanPostProcessor
から継承します。
中心的な要素は、デフォルトでは、ZN で解決される mappedName
参照のみを含む、Spring BeanFactory を含む、名前付き Bean のアノテーション駆動型注入のための Resource
EE アノテーションです。"alwaysUseJndiLookup" flag
は、name
参照およびデフォルト名にも標準の Jakarta EE リソースインジェクションと同等の JNDI ルックアップを適用します。ターゲット Bean は単純な POJO にすることができ、型が一致する必要があること以外に特別な要件はありません。
さらに、JSR-250 仕様に遡るアノテーションの元の javax.annotation
バリアント (Java EE 5-8、これも JDK 6 ~ 8 に含まれます) も引き続きサポートされます。これは主にスムーズなアップグレードパスを目的としたものであり、新しいアプリケーションでの採用を目的としたものではないことに注意してください。
このポストプロセッサーは、Resource
EE に類似した EJB EJB
EE アノテーションもサポートしており、フォールバック取得のためにローカル 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
- 関連事項:
ネストされたクラスのサマリー
修飾子と型クラス説明protected static class
@Resource および関連するアノテーションをサポートする、アノテーション付きフィールドまたは setter メソッドに関する一般的な注入情報を表すクラス。フィールドサマリー
クラス org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor から継承されたフィールド
logger
インターフェース org.springframework.beans.factory.aot.BeanRegistrationAotProcessor から継承されたフィールド
IGNORE_REGISTRATION_ATTRIBUTE
インターフェース org.springframework.core.Ordered から継承されたフィールド
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
コンストラクターのサマリー
コンストラクター説明init および destroy アノテーション型をそれぞれPostConstruct
EE およびPreDestroy
EE に設定して、新しい CommonAnnotationBeanPostProcessor を作成します。メソッドのサマリー
修飾子と型メソッド説明protected ObjectSE
autowireResource
(BeanFactory factory, CommonAnnotationBeanPostProcessor.LookupElement element, StringSE requestingBeanName) 指定されたファクトリに基づいたオートワイヤーを介して、指定された名前と型のリソースオブジェクトを取得します。protected ObjectSE
buildLazyResourceProxy
(CommonAnnotationBeanPostProcessor.LookupElement element, StringSE requestingBeanName) 指定された名前と型の遅延解決リソースプロキシを取得し、メソッド呼び出しが入るとオンデマンドでgetResource(org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.LookupElement, java.lang.String)
に委譲します。protected ObjectSE
getResource
(CommonAnnotationBeanPostProcessor.LookupElement element, StringSE requestingBeanName) 指定された名前と型のリソースオブジェクトを取得します。void
ignoreResourceType
(StringSE resourceType) @Resource
アノテーションを解決するときに、指定されたリソース型を無視します。boolean
postProcessAfterInstantiation
(ObjectSE bean, StringSE beanName) コンストラクターまたはファクトリメソッドを介して Bean がインスタンス化された後、Spring プロパティの設定(明示的なプロパティまたはオートワイヤーから)が発生する前に操作を実行します。postProcessBeforeInstantiation
(ClassSE<?> beanClass, StringSE beanName) ターゲット Bean がインスタンス化される前に、この BeanPostProcessor を適用します。void
postProcessMergedBeanDefinition
(RootBeanDefinition beanDefinition, ClassSE<?> beanType, StringSE beanName) 指定された Bean の指定されたマージ済み Bean 定義を後処理します。postProcessProperties
(PropertyValues pvs, ObjectSE bean, StringSE beanName) ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。processAheadOfTime
(RegisteredBean registeredBean) 指定されたRegisteredBean
インスタンスを事前に処理し、コントリビューションまたはnull
を返します。void
processInjection
(ObjectSE bean) 任意のターゲットインスタンスを直接呼び出すためのネイティブ処理メソッド。サポートされている「リソース」アノテーション型のいずれかでアノテーションが付けられたすべてのフィールドとメソッドを解決します。void
resetBeanDefinition
(StringSE beanName) 指定された名前の Bean 定義がリセットされ、このポストプロセッサーが影響を受ける Bean のメタデータをクリアする必要があるという通知。void
setAlwaysUseJndiLookup
(boolean alwaysUseJndiLookup) name
属性とデフォルト名であっても、標準の Jakarta EE リソースインジェクションと同等の JNDI ルックアップを常に使用するかどうかを設定します。void
setBeanFactory
(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。void
setFallbackToDefaultTypeMatch
(boolean fallbackToDefaultTypeMatch) 明示的な名前が指定されていない場合、型の一致へのフォールバックを許可するかどうかを設定します。void
setJndiFactory
(BeanFactory jndiFactory) JNDI を直接指すmappedName
属性について、@Resource
/@EJB
アノテーション付きフィールドおよび setter メソッドに注入されるオブジェクトのファクトリを指定します。void
setResourceFactory
(BeanFactory resourceFactory) name
属性とデフォルト名について、@Resource
/@EJB
アノテーション付きフィールドと setter メソッドに注入されるオブジェクトのファクトリを指定します。クラス org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor から継承されたメソッド
addDestroyAnnotationType, addInitAnnotationType, getOrder, postProcessAfterInitialization, postProcessBeforeDestruction, postProcessBeforeInitialization, requiresDestruction, setDestroyAnnotationType, setInitAnnotationType, setOrder
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.beans.factory.config.BeanPostProcessor から継承されたメソッド
postProcessAfterInitialization, postProcessBeforeInitialization
インターフェース org.springframework.beans.factory.aot.BeanRegistrationAotProcessor から継承されたメソッド
isBeanExcludedFromAotProcessing
コンストラクターの詳細
CommonAnnotationBeanPostProcessor
public CommonAnnotationBeanPostProcessor()init および destroy アノテーション型をそれぞれPostConstruct
EE およびPreDestroy
EE に設定して、新しい CommonAnnotationBeanPostProcessor を作成します。
メソッドの詳細
ignoreResourceType
@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
JNDI を直接指すmappedName
属性に対して、@Resource
/@EJB
アノテーション付きフィールドと setter メソッドに挿入されるオブジェクトのファクトリを指定します。このファクトリは、name
属性とデフォルト名に対しても JNDI 検索を強制するために、"alwaysUseJndiLookup" が "true" に設定されている場合にも使用されます。デフォルトは、標準の Jakarta EE リソースインジェクションと同等の JNDI ルックアップ動作の
SimpleJndiBeanFactory
です。setResourceFactory
name
属性とデフォルト名について、@Resource
/@EJB
アノテーション付きフィールドと setter メソッドに注入されるオブジェクトのファクトリを指定します。デフォルトは、このポストプロセッサーが定義されている BeanFactory であり、リソース名を Spring Bean 名として検索します。このポストプロセッサーをプログラムで使用するには、リソースファクトリを明示的に指定します。
Spring の
SimpleJndiBeanFactory
を指定すると、name
属性とデフォルト名の場合でも、標準の Jakarta EE リソースインジェクションと同等の JNDI 検索動作が実行されます。これは、"alwaysUseJndiLookup" フラグが有効にする動作と同じです。setBeanFactory
インターフェースからコピーされた説明:BeanFactoryAware
所有ファクトリを Bean インスタンスに提供するコールバック。通常の Bean プロパティの設定後、ただし
InitializingBean.afterPropertiesSet()
またはカスタム init-method などの初期化コールバックの前に呼び出されます。- 次で指定:
- インターフェース
BeanFactoryAware
のsetBeanFactory
- パラメーター:
beanFactory
- 所有 BeanFactory(非null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。- 関連事項:
postProcessMergedBeanDefinition
public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, ClassSE<?> beanType, StringSE beanName) インターフェースからコピーされた説明:MergedBeanDefinitionPostProcessor
指定された Bean の指定されたマージ済み Bean 定義を後処理します。- 次で指定:
- インターフェース
MergedBeanDefinitionPostProcessor
のpostProcessMergedBeanDefinition
- オーバーライド:
- クラス
InitDestroyAnnotationBeanPostProcessor
のpostProcessMergedBeanDefinition
- パラメーター:
beanDefinition
- Bean のマージされた Bean 定義beanType
- 管理対象 Bean インスタンスの実際の型beanName
- Bean の名前- 関連事項:
processAheadOfTime
インターフェースからコピーされた説明:BeanRegistrationAotProcessor
指定されたRegisteredBean
インスタンスを事前に処理し、コントリビューションまたはnull
を返します。プロセッサーは、任意の手法を自由に使用して、特定のインスタンスを分析できます。ほとんどの場合、リフレクションを使用して、コントリビューションで使用するフィールドまたはメソッドを見つけます。コントリビューションは通常、AOT 最適化アプリケーションの実行時に使用できるソースコードまたはリソースファイルを生成します。
指定されたインスタンスがプロセッサーに関連していない場合は、
null
コントリビューションを返す必要があります。- 次で指定:
- インターフェース
BeanRegistrationAotProcessor
のprocessAheadOfTime
- オーバーライド:
- クラス
InitDestroyAnnotationBeanPostProcessor
のprocessAheadOfTime
- パラメーター:
registeredBean
- 処理する登録済み Bean- 戻り値:
BeanRegistrationAotContribution
またはnull
resetBeanDefinition
インターフェースからコピーされた説明:MergedBeanDefinitionPostProcessor
指定された名前の Bean 定義がリセットされ、このポストプロセッサーが影響を受ける Bean のメタデータをクリアする必要があるという通知。デフォルトの実装は空です。
- 次で指定:
- インターフェース
MergedBeanDefinitionPostProcessor
のresetBeanDefinition
- パラメーター:
beanName
- Bean の名前- 関連事項:
postProcessBeforeInstantiation
インターフェースからコピーされた説明:InstantiationAwareBeanPostProcessor
ターゲット Bean がインスタンス化される前に、この BeanPostProcessor を適用します。返される Bean オブジェクトは、ターゲット Bean の代わりに使用するプロキシであり、ターゲット Bean のデフォルトのインスタンス化を効果的に抑制します。このメソッドによって null 以外のオブジェクトが返された場合、Bean 作成プロセスは短絡されます。適用される追加の処理は、構成された
BeanPostProcessors
からのBeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String)
コールバックのみです。このコールバックは、Bean クラスを持つ Bean 定義、および返された Bean 型がここに渡されるファクトリメソッド定義に適用されます。
ポストプロセッサーは、ここで返される Bean オブジェクトの型を予測するために、拡張
SmartInstantiationAwareBeanPostProcessor
インターフェースを実装できます。デフォルトの実装は
null
を返します。- 次で指定:
- インターフェース
InstantiationAwareBeanPostProcessor
のpostProcessBeforeInstantiation
- パラメーター:
beanClass
- インスタンス化される Bean のクラスbeanName
- Bean の名前- 戻り値:
- ターゲット Bean のデフォルトのインスタンスの代わりに公開する Bean オブジェクト、またはデフォルトのインスタンス化を続行する
null
- 関連事項:
postProcessAfterInstantiation
インターフェースからコピーされた説明:InstantiationAwareBeanPostProcessor
コンストラクターまたはファクトリメソッドを介して Bean がインスタンス化された後、Spring プロパティの設定(明示的なプロパティまたはオートワイヤーから)が発生する前に操作を実行します。これは、Spring のオートワイヤーが開始される直前の、指定された Bean インスタンスでカスタムフィールドインジェクションを実行するための理想的なコールバックです。
デフォルトの実装は
true
を返します。- 次で指定:
- インターフェース
InstantiationAwareBeanPostProcessor
のpostProcessAfterInstantiation
- パラメーター:
bean
- プロパティがまだ設定されていない状態で作成された Bean インスタンスbeanName
- Bean の名前- 戻り値:
- Bean でプロパティを設定する必要がある場合は
true
。プロパティの入力をスキップする必要がある場合はfalse
。通常の実装ではtrue
を返します。false
を返すと、後続の InstantiationAwareBeanPostProcessor インスタンスがこの Bean インスタンスで呼び出されなくなります。 - 関連事項:
postProcessProperties
インターフェースからコピーされた説明:InstantiationAwareBeanPostProcessor
ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。デフォルトの実装は、指定された
pvs
をそのまま返します。- 次で指定:
- インターフェース
InstantiationAwareBeanPostProcessor
のpostProcessProperties
- パラメーター:
pvs
- ファクトリが適用しようとしているプロパティ値 (非null
)bean
- Bean インスタンスは作成されましたが、そのプロパティはまだ設定されていませんbeanName
- Bean の名前- 戻り値:
- 指定された Bean に適用する実際のプロパティ値(渡された PropertyValues インスタンスにすることができます)、またはプロパティの入力をスキップする
null
processInjection
任意のターゲットインスタンスを直接呼び出すためのネイティブ処理メソッド。サポートされている「リソース」アノテーション型のいずれかでアノテーションが付けられたすべてのフィールドとメソッドを解決します。- パラメーター:
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
protected ObjectSE getResource(CommonAnnotationBeanPostProcessor.LookupElement element, @Nullable StringSE requestingBeanName) throws NoSuchBeanDefinitionException 指定された名前と型のリソースオブジェクトを取得します。- パラメーター:
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
- 対応するターゲットリソースが見つからない場合