クラス ProxyFactoryBean
- 実装されたすべてのインターフェース:
SerializableSE
、Advised
、TargetClassAware
、Aware
、BeanClassLoaderAware
、BeanFactoryAware
、FactoryBean<ObjectSE>
BeanFactory
の Bean に基づいて AOP プロキシを構築する FactoryBean
実装。MethodInterceptors
および Advisors
は、"interceptorNames" プロパティで指定された現在の Bean ファクトリ内の Bean 名のリストによって識別されます。リストの最後のエントリは、ターゲット Bean または TargetSource
の名前にすることができますが、通常は代わりに "targetName" /"target" /"targetSource" プロパティを使用することをお勧めします。
グローバルインターセプターとアドバイザーは、ファクトリレベルで追加できます。指定されたものは、"xxx*" エントリがリストに含まれているインターセプターリストで展開され、指定されたプレフィックスを Bean 名と一致させます。たとえば、"global*" は "globalBean1" と "globalBean2" の両方に一致します。一方、"*" は定義されたすべてのインターセプターに一致します。一致するインターセプターは、Ordered
インターフェースを実装している場合、返された順序値に従って適用されます。
プロキシインターフェースが指定されている場合は JDK プロキシを作成し、そうでない場合は実際のターゲットクラスの CGLIB プロキシを作成します。動的サブクラスは実行時に作成されるため、後者はターゲットクラスに final メソッドがない場合にのみ機能することに注意してください。
このファクトリから取得したプロキシを Advised
にキャストしたり、ProxyFactoryBean リファレンスを取得してプログラムで操作したりすることができます。これは、独立している既存のプロトタイプ参照では機能しません。ただし、その後ファクトリから入手したプロトタイプでは機能します。インターセプトへの変更は、シングルトン(既存の参照を含む)ですぐに機能します。ただし、インターフェースまたはターゲットを変更するには、ファクトリから新しいインスタンスを取得する必要があります。これは、ファクトリから取得したシングルトンインスタンスが同じオブジェクト ID を持たないことを意味します。ただし、それらには同じインターセプターとターゲットがあり、参照を変更するとすべてのオブジェクトが変更されます。
- 作成者:
- Rod Johnson, Juergen Hoeller
- 関連事項:
フィールドサマリー
クラス org.springframework.aop.framework.AdvisedSupport から継承されたフィールド
EMPTY_TARGET_SOURCE
インターフェース org.springframework.beans.factory.FactoryBean から継承されたフィールド
OBJECT_TYPE_ATTRIBUTE
コンストラクターのサマリー
方法の概要
修飾子と型メソッド説明protected void
アドバイスを変更したら、吹き飛ばしてシングルトンを再キャッシュします。プロキシを返します。ClassSE<?>
プロキシの型を返します。protected ObjectSE
公開するプロキシオブジェクトを返します。boolean
このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、FactoryBean.getObject()
は常に同じオブジェクト(キャッシュ可能な参照)を返しますか?void
setAdvisorAdapterRegistry
(AdvisorAdapterRegistry advisorAdapterRegistry) 使用する AdvisorAdapterRegistry を指定します。void
setAutodetectInterfaces
(boolean autodetectInterfaces) 指定がない場合にプロキシインターフェースを自動検出するかどうかを設定します。void
setBeanClassLoader
(ClassLoaderSE classLoader) Beanclass loader
SE を Bean インスタンスに提供するコールバック。void
setBeanFactory
(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。void
setFrozen
(boolean frozen) この構成をフリーズするかどうかを設定します。void
setInterceptorNames
(StringSE... interceptorNames) Advice/Advisor Bean 名のリストを設定します。void
setProxyClassLoader
(ClassLoaderSE classLoader) ClassLoader を設定して、プロキシクラスを生成します。void
setProxyInterfaces
(ClassSE<?>[] proxyInterfaces) プロキシするインターフェースの名前を設定します。void
setSingleton
(boolean singleton) シングルトンプロパティの値を設定します。void
setTargetName
(StringSE targetName) ターゲット Bean の名前を設定します。クラス org.springframework.aop.framework.ProxyCreatorSupport から継承されたメソッド
addListener, createAopProxy, getAopProxyFactory, isActive, removeListener, setAopProxyFactory
クラス org.springframework.aop.framework.AdvisedSupport から継承されたメソッド
addAdvice, addAdvice, addAdvisor, addAdvisor, addAdvisors, addAdvisors, addInterface, adviceIncluded, copyConfigurationFrom, copyConfigurationFrom, countAdvicesOfType, getAdvisorChainFactory, getAdvisorCount, getAdvisors, getAdvisorsInternal, getInterceptorsAndDynamicInterceptionAdvice, getProxiedInterfaces, getTargetClass, getTargetSource, indexOf, indexOf, isInterfaceProxied, isPreFiltered, removeAdvice, removeAdvisor, removeAdvisor, removeInterface, replaceAdvisor, setAdvisorChainFactory, setInterfaces, setPreFiltered, setTarget, setTargetClass, setTargetSource, toProxyConfigString, toString
クラス org.springframework.aop.framework.ProxyConfig から継承されたメソッド
copyFrom, isExposeProxy, isFrozen, isOpaque, isOptimize, isProxyTargetClass, setExposeProxy, setOpaque, setOptimize, setProxyTargetClass
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, wait, waitSE, waitSE
インターフェース org.springframework.aop.framework.Advised から継承されたメソッド
isExposeProxy, isFrozen, isProxyTargetClass, setExposeProxy
フィールドの詳細
GLOBAL_SUFFIX
インターセプターリストの値のこのサフィックスは、グローバルを展開することを示します。- 関連事項:
logger
コンストラクターの詳細
ProxyFactoryBean
public ProxyFactoryBean()
メソッドの詳細
setProxyInterfaces
プロキシするインターフェースの名前を設定します。インターフェースが指定されていない場合、実際のクラスの CGLIB が作成されます。これは本質的には "setInterfaces" 方式と同等ですが、TransactionProxyFactoryBean の "setProxyInterfaces" を反映しています。
setInterceptorNames
Advice/Advisor Bean 名のリストを設定します。これは常に、Bean ファクトリでこのファクトリ Bean を使用するように設定する必要があります。参照される Bean は、Interceptor、Advisor、Advice のいずれかの型である必要があります。リストの最後のエントリは、ファクトリ内の任意の Bean の名前にすることができます。Advice でも Advisor でもない場合は、新しい SingletonTargetSource が追加されてラップされます。このようなターゲット Bean は、"target" または "targetSource" または "targetName" プロパティが設定されている場合は使用できません。その場合、"interceptorNames" 配列には Advice/Advisor Bean 名のみが含まれている必要があります。
注意: "interceptorNames" リストの最終名としてターゲット Bean を指定することは非推奨であり、将来の Spring バージョンでは削除される予定です。代わりに
"targetName"
プロパティを使用してください。setTargetName
ターゲット Bean の名前を設定します。これは、"interceptorNames" 配列の末尾にターゲット名を指定する代わりに使用できます。「target "/"targetSource" プロパティ」を使用して、ターゲットオブジェクトまたは TargetSource オブジェクトをそれぞれ直接指定することもできます。
setAutodetectInterfaces
public void setAutodetectInterfaces(boolean autodetectInterfaces) 指定がない場合にプロキシインターフェースを自動検出するかどうかを設定します。デフォルトは "true" です。インターフェースが指定されていない場合、このフラグをオフにして、完全なターゲットクラスの CGLIB プロキシを作成します。
setSingleton
public void setSingleton(boolean singleton) シングルトンプロパティの値を設定します。このファクトリが常に同じプロキシインスタンス(同じターゲットを意味する)を返す必要があるか、プロトタイプ Bean 定義から取得された場合、ターゲットとインターセプターも新しいインスタンスである可能性があることを意味する新しいプロトタイプインスタンスを返す必要があるかどうかを制御しますこれにより、オブジェクトグラフの独立性 / 一意性を細かく制御できます。setAdvisorAdapterRegistry
使用する AdvisorAdapterRegistry を指定します。デフォルトはグローバル AdvisorAdapterRegistry です。setFrozen
public void setFrozen(boolean frozen) クラスからコピーされた説明:ProxyConfig
この構成をフリーズするかどうかを設定します。設定がフリーズしている場合、アドバイスの変更はできません。これは最適化に役立ち、呼び出し側が Advised にキャストした後で構成を操作できないようにする場合に役立ちます。
- オーバーライド:
- クラス
ProxyConfig
のsetFrozen
setProxyClassLoader
ClassLoader を設定して、プロキシクラスを生成します。デフォルトは Bean ClassLoader、つまり、すべての Bean クラスをロードするために、それを含む BeanFactory によって使用される ClassLoader です。これは、特定のプロキシに対してここでオーバーライドできます。
setBeanClassLoader
インターフェースからコピーされた説明:BeanClassLoaderAware
Beanclass loader
SE を Bean インスタンスに提供するコールバック。通常の Bean プロパティの設定後、ただし
InitializingBean's
InitializingBean.afterPropertiesSet()
メソッドやカスタム init-method などの初期化コールバックの前に呼び出されます。- 次で指定:
- インターフェース
BeanClassLoaderAware
のsetBeanClassLoader
- パラメーター:
classLoader
- 所有クラスローダー
setBeanFactory
インターフェースからコピーされた説明:BeanFactoryAware
所有ファクトリを Bean インスタンスに提供するコールバック。通常の Bean プロパティの設定後、ただし
InitializingBean.afterPropertiesSet()
またはカスタム init-method などの初期化コールバックの前に呼び出されます。- 次で指定:
- インターフェース
BeanFactoryAware
のsetBeanFactory
- パラメーター:
beanFactory
- 所有 BeanFactory(非null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。- 関連事項:
getObject
プロキシを返します。クライアントがこのファクトリ Bean から Bean を取得すると呼び出されます。このファクトリによって返される AOP プロキシのインスタンスを作成します。インスタンスはシングルトン用にキャッシュされ、プロキシのgetObject()
への呼び出しごとに作成されます。- 次で指定:
- インターフェース
FactoryBean<ObjectSE>
のgetObject
- 戻り値:
- このファクトリの現在の状態を反映する新しい AOP プロキシ
- 例外:
BeansException
- 関連事項:
getObjectType
プロキシの型を返します。すでに作成されている場合はシングルトンインスタンスをチェックします。それ以外の場合は、プロキシインターフェース(単一の場合のみ)、ターゲット Bean 型、TargetSource のターゲットクラスにフォールバックします。- 次で指定:
- インターフェース
FactoryBean<ObjectSE>
のgetObjectType
- 戻り値:
- この FactoryBean が作成するオブジェクトの型、または呼び出し時に不明な場合は
null
- 関連事項:
isSingleton
public boolean isSingleton()インターフェースからコピーされた説明:FactoryBean
このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、FactoryBean.getObject()
は常に同じオブジェクト(キャッシュ可能な参照)を返しますか?注意 : FactoryBean がシングルトンオブジェクトを保持していることを示している場合、
getObject()
から返されたオブジェクトは、所有する BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true
を返さないでください。FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。
注意 :
false
を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張SmartFactoryBean
インターフェースの実装は、SmartFactoryBean.isPrototype()
メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンなFactoryBean
実装は、isSingleton()
実装がfalse
を返す場合、常に独立したインスタンスを返すと単純に想定されます。FactoryBean
は通常シングルトンインスタンスを管理するため、デフォルトの実装ではtrue
が返されます。- 次で指定:
- インターフェース
FactoryBean<ObjectSE>
のisSingleton
- 戻り値:
- 公開されたオブジェクトがシングルトンかどうか
- 関連事項:
getProxy
公開するプロキシオブジェクトを返します。デフォルトの実装では、ファクトリの Bean クラスローダーで
getProxy
呼び出しを使用します。オーバーライドして、カスタムクラスローダーを指定できます。- パラメーター:
aopProxy
- プロキシを取得するために準備された AopProxy インスタンス- 戻り値:
- 公開するプロキシオブジェクト
- 関連事項:
adviceChanged
protected void adviceChanged()アドバイスを変更したら、吹き飛ばしてシングルトンを再キャッシュします。