クラス PersistenceAnnotationBeanPostProcessor
- 実装されているすべてのインターフェース:
SerializableSE、BeanRegistrationAotProcessor、Aware、BeanFactoryAware、BeanPostProcessor、DestructionAwareBeanPostProcessor、InstantiationAwareBeanPostProcessor、MergedBeanDefinitionPostProcessor、Ordered、PriorityOrdered
EntityManagerFactoryEE および EntityManagerEE の注入のために、PersistenceUnitEE および PersistenceContextEE アノテーションを処理する BeanPostProcessor。Spring で管理されたオブジェクト内のそのようなアノテーション付きフィールドまたはメソッドは、自動的に挿入されます。 このポストプロセッサーは、アノテーション付きフィールドまたはメソッドがそのように宣言されている場合、EntityManagerFactory および EntityManager のサブインターフェースを挿入します。実際の型は早期に検証されますが、共有(「トランザクション」) EntityManager 参照は例外です。この場合、型の不一致が最初の実際の呼び出し時と同じくらい遅く検出される可能性があります。
メモ: 現在の実装では、PersistenceAnnotationBeanPostProcessor は "unitName" 属性 付きの @PersistenceUnit および @PersistenceContext のみをサポートし、属性はまったくサポートしません (デフォルトの単位の場合)。これらのアノテーションがクラスレベルで "name" 属性 とともに存在する場合、デプロイのヒントとしてのみ機能するため、単に無視されます (Jakarta EE 仕様による)。
このポストプロセッサーは、Spring アプリケーションコンテキストで定義された EntityManagerFactory Bean (デフォルト) を取得するか、JNDI から EntityManagerFactory 参照 (「永続性ユニット参照」) を取得できます。Bean の場合、永続性ユニット名は実際にデプロイされたユニットと照合され、デプロイされた名前が見つからない場合は Bean 名がフォールバックユニット名として使用されます。通常、Spring の LocalContainerEntityManagerFactoryBean は、このような EntityManagerFactory Bean の設定に使用されます。または、このような Bean は、たとえば jee:jndi-lookup XML 構成要素 (リクエストされたユニット名と一致する Bean 名) を使用して JNDI から取得することもできます。どちらの場合も、ポストプロセッサー定義は次のように単純になります。
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>JNDI の場合は、このポストプロセッサーの
"persistenceUnits" map で対応する JNDI 名を指定します。通常、Jakarta EE デプロイ記述子の一致する persistence-unit-ref エントリを使用します。デフォルトでは、これらの名前は、"java:comp/env/" 名前空間にある(Jakarta EE resource-ref 規則に従って)リソース参照と見なされます。例:
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
<property name="persistenceUnits">
<map/gt;
<entry key="unit1" value="persistence/unit1"/>
<entry key="unit2" value="persistence/unit2"/>
</map/gt;
</property>
</bean> この場合、指定された永続性ユニットは、Spring 定義の Bean ではなく、常に JNDI で解決されます。永続クラスのウィービングを含む永続ユニットデプロイ全体は、Jakarta EE サーバーに依存します。永続コンテキスト(つまり、EntityManager 参照)は、サーバーが提供する EntityManagerFactory 参照に基づいて構築され、トランザクション EntityManager 処理のために Spring の独自のトランザクション同期機能を使用します(通常、境界の Spring の @Transactional アノテーションとバックエンドとしての JtaTransactionManager を使用します)。Jakarta EE サーバーの独自の EntityManager 処理を希望する場合は、このポストプロセッサーの "persistenceContexts" map(または "extendedPersistenceContexts" map にエントリを指定します。通常は、Jakarta EE デプロイ記述子に一致する persistence-context-ref エントリを指定します。次に例を示します。
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
<property name="persistenceContexts">
<map/gt;
<entry key="unit1" value="persistence/context1"/>
<entry key="unit2" value="persistence/context2"/>
</map/gt;
</property>
</bean> アプリケーションが最初に EntityManager 参照のみを取得する場合は、これだけを指定すれば十分です。EntityManagerFactory 参照も必要な場合は、一致する JNDI の場所を指す "persistenceUnits" と "persistenceContexts" の両方のエントリを指定します。 注: 一般に、EXTENDED EntityManagers を STATELESS Bean に注入しないでください。つまり、スコープ 'singleton'(Spring のデフォルトスコープ)で定義された Spring Bean で型 EXTENDED の @PersistenceContext を使用しないでください。拡張 EntityManagers それゆえ、彼らは(Spring 管理シングルトンが通常です)同時にアクセス Bean に使用してはならない、スレッドセーフではありません。
メモ: デフォルトの PersistenceAnnotationBeanPostProcessor は、"context:annotation-config" および "context:component-scan" XML タグによって登録されます。カスタム PersistenceAnnotationBeanPostProcessor Bean 定義を指定する場合は、デフォルトのアノテーション構成を削除するか、そこでオフにします。
- 導入:
- 2.0
- 作成者:
- Rod Johnson, Juergen Hoeller, Stephane Nicoll, Phillip Webb
- 関連事項:
フィールドのサマリー
インターフェース org.springframework.beans.factory.aot.BeanRegistrationAotProcessor から継承されたフィールド
IGNORE_REGISTRATION_ATTRIBUTEインターフェース org.springframework.core.Ordered から継承されたフィールド
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCEコンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明protected EntityManagerFactoryEEfindDefaultEntityManagerFactory(StringSE requestingBeanName) Spring アプリケーションコンテキストで単一のデフォルト EntityManagerFactory を検索します。protected EntityManagerFactoryEEfindEntityManagerFactory(StringSE unitName, StringSE requestingBeanName) 現在の Spring アプリケーションコンテキストで指定された名前の EntityManagerFactory を検索します。ユニット名が指定されていない場合は、単一のデフォルト EntityManagerFactory(存在する場合)にフォールバックします。protected EntityManagerFactoryEEfindNamedEntityManagerFactory(StringSE unitName, StringSE requestingBeanName) 現在の Spring アプリケーションコンテキストで、指定された名前の EntityManagerFactory を検索します。intgetOrder()このオブジェクトの順序値を取得します。protected EntityManagerEEgetPersistenceContext(StringSE unitName, boolean extended) "persistenceContexts" (または "extendedPersistenceContexts" ) マップを通じて定義された、指定されたユニット名の指定された永続コンテキストを返します。protected EntityManagerFactoryEEgetPersistenceUnit(StringSE unitName) "persistenceUnits" マップを通じて定義された、指定されたユニット名の指定された永続性ユニットを返します。protected <T> T名前で指定されたリソースの JNDI 検索を実行します。voidpostProcessBeforeDestruction(ObjectSE bean, StringSE beanName) 指定された Bean インスタンスを破棄する前に、この BeanPostProcessor を適用します (たとえば、カスタム破棄コールバックを呼び出します)。voidpostProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, ClassSE<?> beanType, StringSE beanName) 指定された Bean の指定されたマージ済み Bean 定義を後処理します。postProcessProperties(PropertyValues pvs, ObjectSE bean, StringSE beanName) ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。processAheadOfTime(RegisteredBean registeredBean) 指定されたRegisteredBeanインスタンスを事前に処理し、コントリビューションまたはnullを返します。booleanrequiresDestruction(ObjectSE bean) 指定された Bean インスタンスがこのポストプロセッサーによる破棄を必要とするかどうかを判断します。voidresetBeanDefinition(StringSE beanName) 指定された名前の Bean 定義がリセットされ、このポストプロセッサーが影響を受ける Bean のメタデータをクリアする必要があるという通知。voidsetBeanFactory(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。voidsetDefaultPersistenceUnitName(StringSE unitName) @PersistenceUnit/@PersistenceContextアノテーションでユニット名が指定されていない場合に使用される、デフォルトの永続ユニット名を指定します。voidsetExtendedPersistenceContexts(MapSE<StringSE, StringSE> extendedPersistenceContexts) EntityManager ルックアップの拡張永続コンテキストを、永続ユニット名から永続コンテキスト JNDI 名へのマップ(EntityManager インスタンスに解決する必要がある)として指定します。voidsetJndiEnvironment(PropertiesSE jndiEnvironment) JNDI ルックアップに使用する JNDI 環境を設定します。voidsetJndiTemplate(ObjectSE jndiTemplate) JNDI ルックアップに使用する JNDI テンプレートを設定します。voidsetOrder(int order) voidsetPersistenceContexts(MapSE<StringSE, StringSE> persistenceContexts) EntityManager ルックアップのトランザクション永続コンテキストを、永続ユニット名から永続コンテキスト JNDI 名へのマップ(EntityManager インスタンスに解決する必要がある)として指定します。voidsetPersistenceUnits(MapSE<StringSE, StringSE> persistenceUnits) EntityManagerFactory ルックアップの永続性ユニットを、永続性ユニット名から永続性ユニット JNDI 名へのマップ(EntityManagerFactory インスタンスに解決する必要がある)として指定します。voidsetResourceRef(boolean resourceRef) ルックアップを Jakarta EE コンテナーで行うかどうかを設定します。クラス 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インターフェース org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor から継承されたメソッド
postProcessAfterInstantiation, postProcessBeforeInstantiation
コンストラクターの詳細
PersistenceAnnotationBeanPostProcessor
public PersistenceAnnotationBeanPostProcessor()
メソッドの詳細
setJndiTemplate
JNDI ルックアップに使用する JNDI テンプレートを設定します。setJndiEnvironment
JNDI ルックアップに使用する JNDI 環境を設定します。setResourceRef
public void setResourceRef(boolean resourceRef) ルックアップが Jakarta EE コンテナーで発生するかどうか、つまり、JNDI 名にプレフィックス "java:comp/env/" を追加する必要があるかどうかを設定します。PersistenceAnnotationBeanPostProcessor のデフォルトは "true" です。setPersistenceUnits
EntityManagerFactory ルックアップの永続性ユニットを、永続性ユニット名から永続性ユニット JNDI 名へのマップ(EntityManagerFactory インスタンスに解決する必要がある)として指定します。ここで指定する JNDI 名は、Jakarta EE デプロイ記述子の
persistence-unit-refエントリを参照し、ターゲット永続性ユニットと一致する必要があります。アノテーションでユニット名が指定されていない場合、
default persistence unitに指定された値(デフォルトでは、空の文字列にマップされた値)、または 1 つしかない場合は単一の永続性ユニットが使用されます。これは主に Jakarta EE 環境での使用を目的としており、すべてのルックアップは標準の JPA アノテーションによって駆動され、すべての EntityManagerFactory 参照は JNDI から取得されます。このようなシナリオでは、個別の EntityManagerFactory Bean 定義は必要ありません。
対応する "persistenceContexts "/"extendedPersistenceContexts" " が指定されていない場合、
@PersistenceContextはここで定義された EntityManagerFactory 上に構築された EntityManagers に解決されます。これらは Spring 管理の EntityManagers であり、Spring の機能に基づいてトランザクション同期を実装することに注意してください。Jakarta EE サーバー独自の EntityManager を使用する場合処理には、対応する "persistenceContexts"/"extendedPersistenceContexts" " を指定します。setPersistenceContexts
EntityManager ルックアップのトランザクション永続コンテキストを、永続ユニット名から永続コンテキスト JNDI 名へのマップ(EntityManager インスタンスに解決する必要がある)として指定します。ここで指定する JNDI 名は、Jakarta EE デプロイ記述子の
persistence-context-refエントリを参照し、ターゲット永続性ユニットと一致し、永続性コンテキスト型Transactionで設定されている必要があります。アノテーションでユニット名が指定されていない場合、
default persistence unitに指定された値(デフォルトでは、空の文字列にマップされた値)、または 1 つしかない場合は単一の永続性ユニットが使用されます。これは主に Jakarta EE 環境での使用を目的としており、すべてのルックアップは標準の JPA アノテーションによって駆動され、すべての EntityManager 参照は JNDI から取得されます。このようなシナリオでは、個別の EntityManagerFactory Bean 定義は必要ありません。すべての EntityManager 処理は、Jakarta EE サーバー自体によって行われます。
setExtendedPersistenceContexts
EntityManager ルックアップの拡張永続コンテキストを、永続ユニット名から永続コンテキスト JNDI 名へのマップ(EntityManager インスタンスに解決する必要がある)として指定します。ここで指定する JNDI 名は、Jakarta EE デプロイ記述子の
persistence-context-refエントリを参照し、ターゲット永続性ユニットと一致し、永続性コンテキスト型Extendedで設定されている必要があります。アノテーションでユニット名が指定されていない場合、
default persistence unitに指定された値(デフォルトでは、空の文字列にマップされた値)、または 1 つしかない場合は単一の永続性ユニットが使用されます。これは主に Jakarta EE 環境での使用を目的としており、すべてのルックアップは標準の JPA アノテーションによって駆動され、すべての EntityManager 参照は JNDI から取得されます。このようなシナリオでは、個別の EntityManagerFactory Bean 定義は必要ありません。すべての EntityManager 処理は、Jakarta EE サーバー自体によって行われます。
setDefaultPersistenceUnitName
@PersistenceUnit/@PersistenceContextアノテーションでユニット名が指定されていない場合に使用される、デフォルトの永続ユニット名を指定します。これは主にアプリケーションコンテキストでのルックアップを目的としており、ターゲット永続性ユニット名(通常は Bean 名と一致)を示しますが、
"persistenceUnits"/"persistenceContexts"/"extendedPersistenceContexts"マップでのルックアップにも適用され、空の文字列のマッピングが重複する必要がなくなります。デフォルトでは、Spring アプリケーションコンテキストで単一の EntityManagerFactory Bean があるかどうかをチェックします。そのようなファクトリが複数ある場合は、このデフォルトの永続性ユニット名を指定するか、アノテーションで名前付き永続性ユニットを明示的に参照してください。
setOrder
public void setOrder(int order) getOrder
public int getOrder()インターフェースからコピーされた説明:Orderedこのオブジェクトの順序値を取得します。値が高いほど、優先度は低くなります。結果として、最も低い値を持つオブジェクトが最高の優先度を持ちます(サーブレット
load-on-startupの値に多少似ています)。同じ順序の値は、影響を受けるオブジェクトの任意のソート位置になります。
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 - パラメーター:
beanDefinition- Bean のマージされた Bean 定義beanType- 管理対象 Bean インスタンスの実際の型beanName- Bean の名前- 関連事項:
resetBeanDefinition
インターフェースからコピーされた説明:MergedBeanDefinitionPostProcessor指定された名前の Bean 定義がリセットされ、このポストプロセッサーが影響を受ける Bean のメタデータをクリアする必要があるという通知。デフォルトの実装は空です。
- 次で指定:
- インターフェース
MergedBeanDefinitionPostProcessorのresetBeanDefinition - パラメーター:
beanName- Bean の名前- 関連事項:
processAheadOfTime
インターフェースからコピーされた説明:BeanRegistrationAotProcessor指定されたRegisteredBeanインスタンスを事前に処理し、コントリビューションまたはnullを返します。プロセッサーは、任意の手法を自由に使用して、特定のインスタンスを分析できます。ほとんどの場合、リフレクションを使用して、コントリビューションで使用するフィールドまたはメソッドを見つけます。コントリビューションは通常、AOT 最適化アプリケーションの実行時に使用できるソースコードまたはリソースファイルを生成します。
指定されたインスタンスがプロセッサーに関連していない場合は、
nullコントリビューションを返す必要があります。- 次で指定:
- インターフェース
BeanRegistrationAotProcessorのprocessAheadOfTime - パラメーター:
registeredBean- 処理する登録済み Bean- 戻り値:
BeanRegistrationAotContributionまたはnull
postProcessProperties
インターフェースからコピーされた説明:InstantiationAwareBeanPostProcessorファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。デフォルトの実装は、指定された
pvsをそのまま返します。- 次で指定:
- インターフェース
InstantiationAwareBeanPostProcessorのpostProcessProperties - パラメーター:
pvs- ファクトリが適用しようとしているプロパティ値 (非null)bean- Bean インスタンスは作成されましたが、そのプロパティはまだ設定されていませんbeanName- Bean の名前- 戻り値:
- 指定された Bean に適用する実際のプロパティ値(渡された PropertyValues インスタンスにすることができます)、またはプロパティの入力をスキップする
null
postProcessBeforeDestruction
インターフェースからコピーされた説明:DestructionAwareBeanPostProcessor指定された Bean インスタンスを破棄する前に、この BeanPostProcessor を適用します (たとえば、カスタム破棄コールバックを呼び出します)。DisposableBean の
destroyおよびカスタム destroy メソッドのように、このコールバックは、コンテナーがライフサイクルを完全に管理する Bean にのみ適用されます。これは通常、シングルトンとスコープ Bean の場合です。- 次で指定:
- インターフェース
DestructionAwareBeanPostProcessorのpostProcessBeforeDestruction - パラメーター:
bean- 破棄される Bean インスタンスbeanName- Bean の名前- 関連事項:
requiresDestruction
インターフェースからコピーされた説明:DestructionAwareBeanPostProcessor指定された Bean インスタンスがこのポストプロセッサーによる破棄を必要とするかどうかを判断します。デフォルトの実装は
trueを返します。DestructionAwareBeanPostProcessorの 5 以前の実装がこのメソッドの具体的な実装を提供しない場合、Spring はtrueも暗黙のうちに想定します。- 次で指定:
- インターフェース
DestructionAwareBeanPostProcessorのrequiresDestruction - パラメーター:
bean- チェックする Bean インスタンス- 戻り値:
-
DestructionAwareBeanPostProcessor.postProcessBeforeDestruction(java.lang.Object, java.lang.String)が最終的にこの Bean インスタンスのために呼び出されることになっている場合はtrue、または不要な場合はfalse
getPersistenceUnit
"persistenceUnits" マップを通じて定義された、指定されたユニット名の指定された永続性ユニットを返します。- パラメーター:
unitName- 永続性ユニットの名前- 戻り値:
- 対応する EntityManagerFactory、または見つからない場合は
null - 関連事項:
getPersistenceContext
@Nullable protected EntityManagerEE getPersistenceContext(@Nullable StringSE unitName, boolean extended) "persistenceContexts" (または "extendedPersistenceContexts" ) マップを通じて定義された、指定されたユニット名の指定された永続コンテキストを返します。- パラメーター:
unitName- 永続性ユニットの名前extended- 拡張永続コンテキストを取得するかどうか- 戻り値:
- 対応する EntityManager、または見つからない場合は
null - 関連事項:
findEntityManagerFactory
protected EntityManagerFactoryEE findEntityManagerFactory(@Nullable StringSE unitName, @Nullable StringSE requestingBeanName) throws NoSuchBeanDefinitionException 現在の Spring アプリケーションコンテキストで指定された名前の EntityManagerFactory を検索します。ユニット名が指定されていない場合は、単一のデフォルト EntityManagerFactory(存在する場合)にフォールバックします。- パラメーター:
unitName- 永続性ユニットの名前 (nullまたは空の場合があります)requestingBeanName- リクエストしている Bean の名前- 戻り値:
- EntityManagerFactory
- 例外:
NoSuchBeanDefinitionException- コンテキストにそのような EntityManagerFactory がない場合
findNamedEntityManagerFactory
protected EntityManagerFactoryEE findNamedEntityManagerFactory(StringSE unitName, @Nullable StringSE requestingBeanName) throws NoSuchBeanDefinitionException 現在の Spring アプリケーションコンテキストで、指定された名前の EntityManagerFactory を検索します。- パラメーター:
unitName- 永続性ユニットの名前 (空になることはありません)requestingBeanName- リクエストしている Bean の名前- 戻り値:
- EntityManagerFactory
- 例外:
NoSuchBeanDefinitionException- コンテキストにそのような EntityManagerFactory がない場合
findDefaultEntityManagerFactory
protected EntityManagerFactoryEE findDefaultEntityManagerFactory(@Nullable StringSE requestingBeanName) throws NoSuchBeanDefinitionException Spring アプリケーションコンテキストで単一のデフォルト EntityManagerFactory を検索します。- 戻り値:
- デフォルトの EntityManagerFactory
- 例外:
NoSuchBeanDefinitionException- コンテキストに単一の EntityManagerFactory がない場合
lookup
名前で指定されたリソースの JNDI 検索を実行します。JNDI 名が特定の永続性ユニットにマップされるときに、EntityManagerFactory および EntityManager ルックアップのために呼び出されます。
- パラメーター:
jndiName- 検索する JNDI 名requiredType- オブジェクトの必要な型- 戻り値:
- 取得したオブジェクト
- 例外:
ExceptionSE- JNDI ルックアップが失敗した場合