クラス AbstractAutoProxyCreator
- 実装されたすべてのインターフェース:
SerializableSE
、AopInfrastructureBean
、Aware
、BeanClassLoaderAware
、BeanFactoryAware
、BeanPostProcessor
、InstantiationAwareBeanPostProcessor
、SmartInstantiationAwareBeanPostProcessor
、Ordered
BeanPostProcessor
実装。 このクラスは、作成するすべてのプロキシで共有される「共通」インターセプターと、Bean インスタンスごとに一意の「特定」インターセプターを区別します。共通インターセプターは不要です。存在する場合は、interceptorNames プロパティを使用して設定されます。ProxyFactoryBean
と同様に、プロトタイプアドバイザーとインターセプターを正しく処理できるように、Bean 参照ではなく、現在のファクトリ内のインターセプター名が使用されます。たとえば、ステートフルミックスインをサポートする場合などです。"interceptorNames"
エントリでは、すべてのアドバイス型がサポートされます。
このような自動プロキシは、同じプロキシでラップする必要がある Bean が多数ある場合、つまり同じインターセプターに委譲する場合に特に役立ちます。x ターゲット Bean の x 反復プロキシ定義の代わりに、そのようなポストプロセッサーを Bean ファクトリに 1 つ登録して、同じ効果を実現できます。
サブクラスは、型、名前、定義の詳細などによって、Bean をプロキシするかどうかを決定するための任意の戦略を適用できます。また、特定の Bean インスタンスにのみ適用される追加のインターセプターを返すこともできます。単純な具体的な実装は BeanNameAutoProxyCreator
で、指定された名前によってプロキシされる Bean を識別します。
任意の数の TargetSourceCreator
実装を使用して、カスタムターゲットソースを作成できます。たとえば、プロトタイプオブジェクトをプールします。TargetSourceCreator がカスタム TargetSource
を指定している限り、アドバイスがなくても自動プロキシは発生します。TargetSourceCreators セットがない場合、または一致するものがない場合、デフォルトで SingletonTargetSource
がターゲット Bean インスタンスをラップするために使用されます。
- 導入:
- 13.10.2003
- 作成者:
- Juergen Hoeller, Rod Johnson, Rob Harrop, Sam Brannen
- 関連事項:
フィールドサマリー
修飾子と型フィールド説明protected static final ObjectSE[]
サブクラスの便利な定数: 「プロキシしない」の戻り値。protected final Log
サブクラスで利用可能なロガー。protected static final ObjectSE[]
サブクラスの便利な定数: 「追加のインターセプターなしのプロキシ、一般的なインターセプターのみ」の戻り値。インターフェース org.springframework.core.Ordered から継承されたフィールド
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
コンストラクターのサマリー
方法の概要
修飾子と型メソッド説明protected boolean
サブクラスによって返されたアドバイザが、Bean のターゲットクラスに一致するように事前にフィルタリングされているかどうかを返します。これにより、AOP 呼び出しのアドバイザチェーンを構築するときに ClassFilter チェックをスキップできます。protected Advisor[]
buildAdvisors
(StringSE beanName, ObjectSE[] specificInterceptors) 特定のインターセプターと共通インターセプターを含む、指定された Bean のアドバイザーを決定します。これらはすべてアドバイザーインターフェースに適合しています。protected ObjectSE
createProxy
(ClassSE<?> beanClass, StringSE beanName, ObjectSE[] specificInterceptors, TargetSource targetSource) 指定された Bean の AOP プロキシを作成します。protected void
customizeProxyFactory
(ProxyFactory proxyFactory) サブクラスは、これを実装することを選択できます。たとえば、公開されているインターフェースを変更するためです。ClassSE<?>
determineBeanType
(ClassSE<?> beanClass, StringSE beanName) このプロセッサーのInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)
コールバックから最終的に返される Bean の型を決定します。ConstructorSE<?>[]
determineCandidateConstructors
(ClassSE<?> beanClass, StringSE beanName) 指定された Bean に使用する候補コンストラクターを決定します。protected abstract ObjectSE[]
getAdvicesAndAdvisorsForBean
(ClassSE<?> beanClass, StringSE beanName, TargetSource customTargetSource) 指定された Bean がプロキシされるかどうか、および適用する追加のアドバイス (たとえば、AOP Alliance インターセプター) とアドバイザーを返します。protected BeanFactory
所有するBeanFactory
を返します。protected ObjectSE
getCacheKey
(ClassSE<?> beanClass, StringSE beanName) 指定された Bean クラスと Bean 名のキャッシュキーを作成します。protected TargetSource
getCustomTargetSource
(ClassSE<?> beanClass, StringSE beanName) Bean インスタンスのターゲットソースを作成します。getEarlyBeanReference
(ObjectSE bean, StringSE beanName) 通常、循環参照を解決するために、指定された Bean に早期にアクセスするための参照を取得します。boolean
isFrozen()
構成が凍結されているかどうかを返します。アドバイスを変更することはできません。protected boolean
isInfrastructureClass
(ClassSE<?> beanClass) 指定された Bean クラスが、決してプロキシされるべきではないインフラストラクチャクラスを表すかどうかを返します。postProcessAfterInitialization
(ObjectSE bean, StringSE beanName) Bean がサブクラスによってプロキシするものとして識別される場合、設定されたインターセプターでプロキシを作成します。postProcessBeforeInstantiation
(ClassSE<?> beanClass, StringSE beanName) ターゲット Bean がインスタンス化される前に、この BeanPostProcessor を適用します。postProcessProperties
(PropertyValues pvs, ObjectSE bean, StringSE beanName) ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。ClassSE<?>
predictBeanType
(ClassSE<?> beanClass, StringSE beanName) 最終的にこのプロセッサーのInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)
コールバックから返される Bean の型を予測します。void
setAdvisorAdapterRegistry
(AdvisorAdapterRegistry advisorAdapterRegistry) 使用するAdvisorAdapterRegistry
を指定します。void
setApplyCommonInterceptorsFirst
(boolean applyCommonInterceptorsFirst) Bean 固有のインターセプターの前に共通インターセプターを適用するかどうかを設定します。void
setBeanFactory
(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。void
setCustomTargetSourceCreators
(TargetSourceCreator... targetSourceCreators) この順序で適用されるカスタムTargetSourceCreators
を設定します。void
setFrozen
(boolean frozen) プロキシをフリーズするかどうかを設定し、作成後にアドバイスがプロキシに追加されないようにします。void
setInterceptorNames
(StringSE... interceptorNames) 共通インターセプターを設定します。protected boolean
shouldProxyTargetClass
(ClassSE<?> beanClass, StringSE beanName) 指定された Bean を、インターフェースではなくターゲットクラスでプロキシするかどうかを決定します。protected boolean
shouldSkip
(ClassSE<?> beanClass, StringSE beanName) 指定された Bean がこのポストプロセッサーによる自動プロキシと見なされない場合、サブクラスはこのメソッドをオーバーライドしてtrue
を返す必要があります。protected ObjectSE
wrapIfNecessary
(ObjectSE bean, StringSE beanName, ObjectSE cacheKey) 必要に応じて、指定された Bean をラップします。クラス org.springframework.aop.framework.ProxyProcessorSupport から継承されたメソッド
evaluateProxyInterfaces, getOrder, getProxyClassLoader, isConfigurationCallbackInterface, isInternalLanguageInterface, setBeanClassLoader, setOrder, setProxyClassLoader
クラス org.springframework.aop.framework.ProxyConfig から継承されたメソッド
copyFrom, isExposeProxy, isOpaque, isOptimize, isProxyTargetClass, setExposeProxy, setOpaque, setOptimize, setProxyTargetClass, toString
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, wait, waitSE, waitSE
インターフェース org.springframework.beans.factory.config.BeanPostProcessor から継承されたメソッド
postProcessBeforeInitialization
インターフェース org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor から継承されたメソッド
postProcessAfterInstantiation
フィールドの詳細
DO_NOT_PROXY
サブクラスの便利な定数: 「プロキシしない」の戻り値。PROXY_WITHOUT_ADDITIONAL_INTERCEPTORS
サブクラスの便利な定数: 「追加のインターセプターなしのプロキシ、一般的なインターセプターのみ」の戻り値。logger
サブクラスで利用可能なロガー。
コンストラクターの詳細
AbstractAutoProxyCreator
public AbstractAutoProxyCreator()
メソッドの詳細
setFrozen
public void setFrozen(boolean frozen) プロキシをフリーズするかどうかを設定し、作成後にアドバイスがプロキシに追加されないようにします。プロキシが作成される前にプロキシ構成が凍結されるのを防ぐために、スーパークラスからオーバーライドされます。
- オーバーライド:
- クラス
ProxyConfig
のsetFrozen
isFrozen
public boolean isFrozen()クラスからコピーされた説明:ProxyConfig
構成が凍結されているかどうかを返します。アドバイスを変更することはできません。- オーバーライド:
- クラス
ProxyConfig
のisFrozen
setAdvisorAdapterRegistry
使用するAdvisorAdapterRegistry
を指定します。デフォルトはグローバル
AdvisorAdapterRegistry
です。setCustomTargetSourceCreators
この順序で適用されるカスタムTargetSourceCreators
を設定します。リストが空の場合、またはすべてが null を返す場合、Bean ごとにSingletonTargetSource
が作成されます。TargetSourceCreators は、アドバイスやアドバイザーが見つからなかったターゲット Bean でも起動することに注意してください。
TargetSourceCreator
が特定の Bean のTargetSource
を返す場合、その Bean はどのような場合でもプロキシされます。TargetSourceCreators
は、このポストプロセッサーがBeanFactory
で使用され、そのBeanFactoryAware
コールバックがトリガーされた場合にのみ呼び出すことができます。- パラメーター:
targetSourceCreators
-TargetSourceCreators
のリスト。順序は重要です。最初に一致したTargetSourceCreator
から返されたTargetSource
(つまり、null 以外を返す最初のTargetSource
)が使用されます。
setInterceptorNames
共通インターセプターを設定します。これらは、現在のファクトリの Bean 名である必要があります。それらは、Spring がサポートするアドバイスまたはアドバイザ型にすることができます。このプロパティが設定されていない場合、共通のインターセプターはゼロになります。マッチングアドバイザーなどの「特定の」インターセプターが必要な場合は、これは完全に有効です。
setApplyCommonInterceptorsFirst
public void setApplyCommonInterceptorsFirst(boolean applyCommonInterceptorsFirst) 共通インターセプターを Bean 固有のインターセプターの前に適用するかどうかを設定します。デフォルトは "true" です。そうでない場合、Bean 固有のインターセプターが最初に適用されます。setBeanFactory
インターフェースからコピーされた説明:BeanFactoryAware
所有ファクトリを Bean インスタンスに提供するコールバック。通常の Bean プロパティの設定後、ただし
InitializingBean.afterPropertiesSet()
またはカスタム init-method などの初期化コールバックの前に呼び出されます。- 次で指定:
- インターフェース
BeanFactoryAware
のsetBeanFactory
- パラメーター:
beanFactory
- 所有 BeanFactory(非null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。- 関連事項:
getBeanFactory
所有しているBeanFactory
を返します。このポストプロセッサーは Bean ファクトリに属している必要がないため、null
の場合があります。predictBeanType
インターフェースからコピーされた説明:SmartInstantiationAwareBeanPostProcessor
最終的にこのプロセッサーのInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)
コールバックから返される Bean の型を予測します。デフォルトの実装は
null
を返します。特定の実装では、追加の処理手順を実行せずに、既知 / キャッシュされている限り、Bean 型を予測しようとする必要があります。- 次で指定:
- インターフェース
SmartInstantiationAwareBeanPostProcessor
のpredictBeanType
- パラメーター:
beanClass
- Bean の生のクラスbeanName
- Bean の名前- 戻り値:
- Bean の型、または予測できない場合は
null
determineBeanType
インターフェースからコピーされた説明:SmartInstantiationAwareBeanPostProcessor
このプロセッサーのInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)
コールバックから最終的に返される Bean の型を決定します。デフォルトの実装は、指定された Bean クラスをそのまま返します。特定の実装では、事前に潜在的なプロキシクラスを作成 / 初期化するために、処理手順を完全に評価する必要があります。
- 次で指定:
- インターフェース
SmartInstantiationAwareBeanPostProcessor
のdetermineBeanType
- パラメーター:
beanClass
- Bean の生のクラスbeanName
- Bean の名前- 戻り値:
- Bean の型 (非
null
)
determineCandidateConstructors
@Nullable public ConstructorSE<?>[] determineCandidateConstructors(ClassSE<?> beanClass, StringSE beanName) インターフェースからコピーされた説明:SmartInstantiationAwareBeanPostProcessor
指定された Bean に使用する候補コンストラクターを決定します。デフォルトの実装は
null
を返します。- 次で指定:
- インターフェース
SmartInstantiationAwareBeanPostProcessor
のdetermineCandidateConstructors
- パラメーター:
beanClass
- Bean の生のクラス (非null
)beanName
- Bean の名前- 戻り値:
- 候補コンストラクター、または何も指定されていない場合は
null
getEarlyBeanReference
インターフェースからコピーされた説明:SmartInstantiationAwareBeanPostProcessor
通常、循環参照を解決するために、指定された Bean に早期にアクセスするための参照を取得します。このコールバックにより、ポストプロセッサーはラッパーを早期に公開する機会が与えられます。つまり、ターゲット Bean インスタンスが完全に初期化される前に公開されます。公開されるオブジェクトは、
BeanPostProcessor.postProcessBeforeInitialization(java.lang.Object, java.lang.String)
/BeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String)
が公開するオブジェクトと同等である必要があります。このメソッドによって返されるオブジェクトは、ポストプロセッサーが前述のポストプロセスコールバックから別のラッパーを返さない限り、Bean 参照として使用されることに注意してください。言い換えると、これらのポストプロセスコールバックは、最終的に同じ参照を公開するか、後続のコールバックから生の Bean インスタンスを返す可能性があります (影響を受ける Bean のラッパーがこのメソッドの呼び出し用にすでに構築されている場合、デフォルトで最終的な Bean 参照として公開されます)。デフォルトの実装は、指定された
bean
をそのまま返します。- 次で指定:
- インターフェース
SmartInstantiationAwareBeanPostProcessor
のgetEarlyBeanReference
- パラメーター:
bean
- 生の Bean インスタンスbeanName
- Bean の名前- 戻り値:
- Bean 参照として公開するオブジェクト (通常は 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
- 関連事項:
postProcessProperties
インターフェースからコピーされた説明:InstantiationAwareBeanPostProcessor
ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。デフォルトの実装は、指定された
pvs
をそのまま返します。- 次で指定:
- インターフェース
InstantiationAwareBeanPostProcessor
のpostProcessProperties
- パラメーター:
pvs
- ファクトリが適用しようとしているプロパティ値 (非null
)bean
- Bean インスタンスは作成されましたが、そのプロパティはまだ設定されていませんbeanName
- Bean の名前- 戻り値:
- 指定された Bean に適用する実際のプロパティ値(渡された PropertyValues インスタンスにすることができます)、またはプロパティの入力をスキップする
null
postProcessAfterInitialization
@Nullable public ObjectSE postProcessAfterInitialization(@Nullable ObjectSE bean, StringSE beanName) Bean がサブクラスによってプロキシするものとして識別される場合、設定されたインターセプターでプロキシを作成します。- 次で指定:
- インターフェース
BeanPostProcessor
のpostProcessAfterInitialization
- パラメーター:
bean
- 新しい Bean インスタンスbeanName
- Bean の名前- 戻り値:
- 使用する Bean インスタンス。元のインスタンスまたはラップされたインスタンス。
null
の場合、後続の BeanPostProcessors は呼び出されません - 関連事項:
getCacheKey
指定された Bean クラスと Bean 名のキャッシュキーを作成します。メモ: 4.2.3 以降、この実装は連結されたクラス / 名前の文字列を返すのではなく、可能な限り最も効率的なキャッシュキーを返します。: プレーンな Bean 名。
FactoryBean
の場合はBeanFactory.FACTORY_BEAN_PREFIX
が前に付加されます。または、Bean 名が指定されていない場合は、指定された BeanClass
がそのまま使用されます。- パラメーター:
beanClass
- Bean クラスbeanName
- Bean 名- 戻り値:
- 指定されたクラスと名前のキャッシュキー
wrapIfNecessary
必要に応じて、つまりプロキシ化の対象となる場合は、指定された Bean をラップします。- パラメーター:
bean
- 生の Bean インスタンスbeanName
- Bean の名前cacheKey
- メタデータアクセスのキャッシュキー- 戻り値:
- Bean または生の Bean インスタンスをそのままラップするプロキシ
isInfrastructureClass
指定された Bean クラスが、決してプロキシされるべきではないインフラストラクチャクラスを表すかどうかを返します。デフォルトの実装では、アドバイス、アドバイザ、AopInfrastructureBeans をインフラストラクチャクラスと見なします。
- パラメーター:
beanClass
- Bean のクラス- 戻り値:
- Bean がインフラストラクチャクラスを表すかどうか
- 関連事項:
shouldSkip
指定された Bean がこのポストプロセッサーによる自動プロキシと見なされない場合、サブクラスはこのメソッドをオーバーライドしてtrue
を返す必要があります。場合によっては、循環参照が発生する場合や、既存のターゲットインスタンスを保持する必要がある場合など、このような状況を回避する必要があります。この実装では、Bean 名が
AutowireCapableBeanFactory
規則に従って「元のインスタンス」を示していない限り、false
を返します。- パラメーター:
beanClass
- Bean のクラスbeanName
- Bean の名前- 戻り値:
- 指定された Bean をスキップするかどうか
- 関連事項:
getCustomTargetSource
Bean インスタンスのターゲットソースを作成します。設定されている場合、任意の TargetSourceCreators を使用します。カスタム TargetSource を使用しない場合は、null
を返します。この実装では、"customTargetSourceCreators" プロパティを使用します。サブクラスはこのメソッドをオーバーライドして、別のメカニズムを使用できます。
- パラメーター:
beanClass
- TargetSource を作成する Bean のクラスbeanName
- Bean の名前- 戻り値:
- この Bean の TargetSource
- 関連事項:
createProxy
protected ObjectSE createProxy(ClassSE<?> beanClass, @Nullable StringSE beanName, @Nullable ObjectSE[] specificInterceptors, TargetSource targetSource) 指定された Bean の AOP プロキシを作成します。- パラメーター:
beanClass
- Bean のクラスbeanName
- Bean の名前specificInterceptors
- この Bean に固有のインターセプターのセット (空でもかまいませんが、null にはできません)targetSource
- プロキシ用の TargetSource、Bean にアクセスするように事前設定済み- 戻り値:
- Bean の AOP プロキシ
- 関連事項:
shouldProxyTargetClass
指定された Bean を、インターフェースではなくターゲットクラスでプロキシするかどうかを決定します。対応する Bean 定義の
"preserveTargetClass" attribute
をチェックします。- パラメーター:
beanClass
- Bean のクラスbeanName
- Bean の名前- 戻り値:
- 指定された Bean をそのターゲットクラスでプロキシする必要があるかどうか
- 関連事項:
advisorsPreFiltered
protected boolean advisorsPreFiltered()サブクラスによって返されたアドバイザが、Bean のターゲットクラスに一致するように事前にフィルタリングされているかどうかを返します。これにより、AOP 呼び出しのアドバイザチェーンを構築するときに ClassFilter チェックをスキップできます。デフォルトは
false
です。サブクラスは、常に事前フィルタリングされたアドバイザを常に返す場合、これをオーバーライドする場合があります。- 戻り値:
- アドバイザが事前にフィルタリングされているかどうか
- 関連事項:
buildAdvisors
protected Advisor[] buildAdvisors(@Nullable StringSE beanName, @Nullable ObjectSE[] specificInterceptors) 特定のインターセプターと共通インターセプターを含む、指定された Bean のアドバイザーを決定します。これらはすべてアドバイザーインターフェースに適合しています。- パラメーター:
beanName
- Bean の名前specificInterceptors
- この Bean に固有のインターセプターのセット (空でもかまいませんが、null にはできません)- 戻り値:
- 指定された Bean のアドバイザのリスト
customizeProxyFactory
サブクラスは、これを実装することを選択できます。たとえば、公開されているインターフェースを変更するためです。デフォルトの実装は空です。
- パラメーター:
proxyFactory
- TargetSource およびインターフェースですでに構成されており、このメソッドが戻った直後にプロキシを作成するために使用される ProxyFactory
getAdvicesAndAdvisorsForBean
@Nullable protected abstract ObjectSE[] getAdvicesAndAdvisorsForBean(ClassSE<?> beanClass, StringSE beanName, @Nullable TargetSource customTargetSource) throws BeansException 指定された Bean がプロキシされるかどうか、および適用する追加のアドバイス (たとえば、AOP Alliance インターセプター) とアドバイザーを返します。- パラメーター:
beanClass
- アドバイスする Bean のクラスbeanName
- Bean の名前customTargetSource
-getCustomTargetSource(java.lang.Class<?>, java.lang.String)
メソッドによって返された TargetSource: は無視できます。カスタムターゲットソースが使用されていない場合は、null
になります。- 戻り値:
- 特定の Bean の追加インターセプターの配列。または追加のインターセプターではなく、一般的なインターセプターのみの場合は空の配列。または、プロキシがまったくない場合は
null
で、一般的なインターセプターさえ使用していません。定数 DO_NOT_PROXY および PROXY_WITHOUT_ADDITIONAL_INTERCEPTORS を参照してください。 - 例外:
BeansException
- エラーの場合- 関連事項: