クラス PersistenceAnnotationBeanPostProcessor
- 実装されたすべてのインターフェース:
SerializableSE
、BeanRegistrationAotProcessor
、Aware
、BeanFactoryAware
、BeanPostProcessor
、DestructionAwareBeanPostProcessor
、InstantiationAwareBeanPostProcessor
、MergedBeanDefinitionPostProcessor
、Ordered
、PriorityOrdered
EntityManagerFactory
EE および EntityManager
EE の注入のために、PersistenceUnit
EE および PersistenceContext
EE アノテーションを処理する 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 EntityManagerFactoryEE
findDefaultEntityManagerFactory
(StringSE requestingBeanName) Spring アプリケーションコンテキストで単一のデフォルト EntityManagerFactory を検索します。protected EntityManagerFactoryEE
findEntityManagerFactory
(StringSE unitName, StringSE requestingBeanName) 現在の Spring アプリケーションコンテキストで指定された名前の EntityManagerFactory を検索します。ユニット名が指定されていない場合は、単一のデフォルト EntityManagerFactory(存在する場合)にフォールバックします。protected EntityManagerFactoryEE
findNamedEntityManagerFactory
(StringSE unitName, StringSE requestingBeanName) 現在の Spring アプリケーションコンテキストで、指定された名前の EntityManagerFactory を検索します。int
getOrder()
このオブジェクトの順序値を取得します。protected EntityManagerEE
getPersistenceContext
(StringSE unitName, boolean extended) "persistenceContexts" (または "extendedPersistenceContexts" ) マップを通じて定義された、指定されたユニット名の指定された永続コンテキストを返します。protected EntityManagerFactoryEE
getPersistenceUnit
(StringSE unitName) "persistenceUnits" マップを通じて定義された、指定されたユニット名の指定された永続性ユニットを返します。protected <T> T
名前で指定されたリソースの JNDI 検索を実行します。void
postProcessBeforeDestruction
(ObjectSE bean, 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
を返します。boolean
requiresDestruction
(ObjectSE bean) 指定された Bean インスタンスがこのポストプロセッサーによる破棄を必要とするかどうかを判断します。void
resetBeanDefinition
(StringSE beanName) 指定された名前の Bean 定義がリセットされ、このポストプロセッサーが影響を受ける Bean のメタデータをクリアする必要があるという通知。void
setBeanFactory
(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。void
setDefaultPersistenceUnitName
(StringSE unitName) @PersistenceUnit
/@PersistenceContext
アノテーションでユニット名が指定されていない場合に使用される、デフォルトの永続ユニット名を指定します。void
setExtendedPersistenceContexts
(MapSE<StringSE, StringSE> extendedPersistenceContexts) EntityManager ルックアップの拡張永続コンテキストを、永続ユニット名から永続コンテキスト JNDI 名へのマップ(EntityManager インスタンスに解決する必要がある)として指定します。void
setJndiEnvironment
(PropertiesSE jndiEnvironment) JNDI ルックアップに使用する JNDI 環境を設定します。void
setJndiTemplate
(ObjectSE jndiTemplate) JNDI ルックアップに使用する JNDI テンプレートを設定します。void
setOrder
(int order) void
setPersistenceContexts
(MapSE<StringSE, StringSE> persistenceContexts) EntityManager ルックアップのトランザクション永続コンテキストを、永続ユニット名から永続コンテキスト JNDI 名へのマップ(EntityManager インスタンスに解決する必要がある)として指定します。void
setPersistenceUnits
(MapSE<StringSE, StringSE> persistenceUnits) EntityManagerFactory ルックアップの永続性ユニットを、永続性ユニット名から永続性ユニット JNDI 名へのマップ(EntityManagerFactory インスタンスに解決する必要がある)として指定します。void
setResourceRef
(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 ルックアップが失敗した場合