クラス 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) Bean- class loaderSE を 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
 
- コンストラクターの詳細- ProxyFactoryBeanpublic ProxyFactoryBean()
 
- メソッドの詳細- setProxyInterfacesプロキシするインターフェースの名前を設定します。インターフェースが指定されていない場合、実際のクラスの CGLIB が作成されます。- これは本質的には "setInterfaces" 方式と同等ですが、TransactionProxyFactoryBean の "setProxyInterfaces" を反映しています。 
- setInterceptorNamesAdvice/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 オブジェクトをそれぞれ直接指定することもできます。 
- setAutodetectInterfacespublic void setAutodetectInterfaces- (boolean autodetectInterfaces) 指定がない場合にプロキシインターフェースを自動検出するかどうかを設定します。- デフォルトは "true" です。インターフェースが指定されていない場合、このフラグをオフにして、完全なターゲットクラスの CGLIB プロキシを作成します。 
- setSingletonpublic void setSingleton- (boolean singleton) シングルトンプロパティの値を設定します。このファクトリが常に同じプロキシインスタンス(同じターゲットを意味する)を返す必要があるか、プロトタイプ Bean 定義から取得された場合、ターゲットとインターセプターも新しいインスタンスである可能性があることを意味する新しいプロトタイプインスタンスを返す必要があるかどうかを制御しますこれにより、オブジェクトグラフの独立性 / 一意性を細かく制御できます。
- setAdvisorAdapterRegistry使用する AdvisorAdapterRegistry を指定します。デフォルトはグローバル AdvisorAdapterRegistry です。
- setFrozenpublic void setFrozen- (boolean frozen) クラスからコピーされた説明:- ProxyConfigこの構成をフリーズするかどうかを設定します。- 設定がフリーズしている場合、アドバイスの変更はできません。これは最適化に役立ち、呼び出し側が Advised にキャストした後で構成を操作できないようにする場合に役立ちます。 - オーバーライド:
-  クラス ProxyConfigのsetFrozen
 
- setProxyClassLoaderClassLoader を設定して、プロキシクラスを生成します。- デフォルトは Bean ClassLoader、つまり、すべての Bean クラスをロードするために、それを含む BeanFactory によって使用される ClassLoader です。これは、特定のプロキシに対してここでオーバーライドできます。 
- setBeanClassLoaderインターフェースからコピーされた説明:- BeanClassLoaderAwareBean- class loaderSE を 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
- 関連事項:
 
- isSingletonpublic 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 インスタンス
- 戻り値:
- 公開するプロキシオブジェクト
- 関連事項:
 
- adviceChangedprotected void adviceChanged()アドバイスを変更したら、吹き飛ばしてシングルトンを再キャッシュします。