クラス AbstractAutoProxyCreator

実装されたすべてのインターフェース:
SerializableSEAopInfrastructureBeanAwareBeanClassLoaderAwareBeanFactoryAwareBeanPostProcessorInstantiationAwareBeanPostProcessorSmartInstantiationAwareBeanPostProcessorOrdered
既知の直属サブクラス
AbstractAdvisorAutoProxyCreatorBeanNameAutoProxyCreator

public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware
適格な各 Bean を AOP プロキシでラップし、Bean 自体を呼び出す前に指定されたインターセプターに委譲する 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
関連事項:
  • フィールドの詳細

  • コンストラクターの詳細

    • AbstractAutoProxyCreator

      public AbstractAutoProxyCreator()
  • メソッドの詳細

    • setFrozen

      public void setFrozen(boolean frozen)
      プロキシをフリーズするかどうかを設定し、作成後にアドバイスがプロキシに追加されないようにします。

      プロキシが作成される前にプロキシ構成が凍結されるのを防ぐために、スーパークラスからオーバーライドされます。

      オーバーライド:
      クラス ProxyConfigsetFrozen 
    • isFrozen

      public boolean isFrozen()
      クラスからコピーされた説明: ProxyConfig
      構成が凍結されているかどうかを返します。アドバイスを変更することはできません。
      オーバーライド:
      クラス ProxyConfigisFrozen 
    • setAdvisorAdapterRegistry

      public void setAdvisorAdapterRegistry(AdvisorAdapterRegistry advisorAdapterRegistry)
      使用する AdvisorAdapterRegistry を指定します。

      デフォルトはグローバル AdvisorAdapterRegistry です。

      関連事項:
    • setCustomTargetSourceCreators

      public void setCustomTargetSourceCreators(TargetSourceCreator... targetSourceCreators)
      この順序で適用されるカスタム TargetSourceCreators を設定します。リストが空の場合、またはすべてが null を返す場合、Bean ごとに SingletonTargetSource が作成されます。

      TargetSourceCreators は、アドバイスやアドバイザーが見つからなかったターゲット Bean でも起動することに注意してください。TargetSourceCreator が特定の Bean の TargetSource を返す場合、その Bean はどのような場合でもプロキシされます。

      TargetSourceCreators は、このポストプロセッサーが BeanFactory で使用され、その BeanFactoryAware コールバックがトリガーされた場合にのみ呼び出すことができます。

      パラメーター:
      targetSourceCreators - TargetSourceCreators のリスト。順序は重要です。最初に一致した TargetSourceCreator から返された TargetSource (つまり、null 以外を返す最初の TargetSource)が使用されます。
    • setInterceptorNames

      public void setInterceptorNames(StringSE... interceptorNames)
      共通インターセプターを設定します。これらは、現在のファクトリの Bean 名である必要があります。それらは、Spring がサポートするアドバイスまたはアドバイザ型にすることができます。

      このプロパティが設定されていない場合、共通のインターセプターはゼロになります。マッチングアドバイザーなどの「特定の」インターセプターが必要な場合は、これは完全に有効です。

    • setApplyCommonInterceptorsFirst

      public void setApplyCommonInterceptorsFirst(boolean applyCommonInterceptorsFirst)
      共通インターセプターを Bean 固有のインターセプターの前に適用するかどうかを設定します。デフォルトは "true" です。そうでない場合、Bean 固有のインターセプターが最初に適用されます。
    • setBeanFactory

      public void setBeanFactory(BeanFactory beanFactory)
      インターフェースからコピーされた説明: BeanFactoryAware
      所有ファクトリを Bean インスタンスに提供するコールバック。

      通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet() またはカスタム init-method などの初期化コールバックの前に呼び出されます。

      次で指定:
      インターフェース BeanFactoryAwaresetBeanFactory 
      パラメーター:
      beanFactory - 所有 BeanFactory(非 null)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。
      関連事項:
    • getBeanFactory

      @Nullable protected BeanFactory getBeanFactory()
      所有している BeanFactory を返します。このポストプロセッサーは Bean ファクトリに属している必要がないため、null の場合があります。
    • predictBeanType

      @Nullable public ClassSE<?> predictBeanType(ClassSE<?> beanClass, StringSE beanName)
      インターフェースからコピーされた説明: SmartInstantiationAwareBeanPostProcessor
      最終的にこのプロセッサーの InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String) コールバックから返される Bean の型を予測します。

      デフォルトの実装は null を返します。特定の実装では、追加の処理手順を実行せずに、既知 / キャッシュされている限り、Bean 型を予測しようとする必要があります。

      次で指定:
      インターフェース SmartInstantiationAwareBeanPostProcessorpredictBeanType 
      パラメーター:
      beanClass - Bean の生のクラス
      beanName - Bean の名前
      戻り値:
      Bean の型、または予測できない場合は null 
    • determineBeanType

      public ClassSE<?> determineBeanType(ClassSE<?> beanClass, StringSE beanName)
      インターフェースからコピーされた説明: SmartInstantiationAwareBeanPostProcessor
      このプロセッサーの InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String) コールバックから最終的に返される Bean の型を決定します。

      デフォルトの実装は、指定された Bean クラスをそのまま返します。特定の実装では、事前に潜在的なプロキシクラスを作成 / 初期化するために、処理手順を完全に評価する必要があります。

      次で指定:
      インターフェース SmartInstantiationAwareBeanPostProcessordetermineBeanType 
      パラメーター:
      beanClass - Bean の生のクラス
      beanName - Bean の名前
      戻り値:
      Bean の型 (非 null)
    • determineCandidateConstructors

      @Nullable public ConstructorSE<?>[] determineCandidateConstructors(ClassSE<?> beanClass, StringSE beanName)
      インターフェースからコピーされた説明: SmartInstantiationAwareBeanPostProcessor
      指定された Bean に使用する候補コンストラクターを決定します。

      デフォルトの実装は null を返します。

      次で指定:
      インターフェース SmartInstantiationAwareBeanPostProcessordetermineCandidateConstructors 
      パラメーター:
      beanClass - Bean の生のクラス (非 null)
      beanName - Bean の名前
      戻り値:
      候補コンストラクター、または何も指定されていない場合は null 
    • getEarlyBeanReference

      public ObjectSE getEarlyBeanReference(ObjectSE bean, StringSE beanName)
      インターフェースからコピーされた説明: SmartInstantiationAwareBeanPostProcessor
      通常、循環参照を解決するために、指定された Bean に早期にアクセスするための参照を取得します。

      このコールバックは、ポストプロセッサーにラッパーを早期に公開する機会を与えます。つまり、ターゲット Bean インスタンスが完全に初期化される前。公開されたオブジェクトは、BeanPostProcessor.postProcessBeforeInitialization(java.lang.Object, java.lang.String)/BeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String) が他に公開するものと同等である必要があります。このメソッドによって返されるオブジェクトは、ポストプロセッサーが上記の後処理コールバックとは異なるラッパーを返さない限り、Bean 参照として使用されることに注意してください。言い換えると、これらのポストプロセスコールバックは、最終的に同じ参照を公開するか、代わりに後続のコールバックから未加工の Bean インスタンスを返す可能性があります(影響を受ける Bean のラッパーがこのメソッドの呼び出し用にすでに構築されている場合は、公開されます。デフォルトで最終的な Bean 参照として)。

      デフォルトの実装は、指定された bean をそのまま返します。

      次で指定:
      インターフェース SmartInstantiationAwareBeanPostProcessorgetEarlyBeanReference 
      パラメーター:
      bean - 生の Bean インスタンス
      beanName - Bean の名前
      戻り値:
      Bean 参照として公開するオブジェクト (通常、渡された Bean インスタンスをデフォルトとして使用)
    • postProcessBeforeInstantiation

      @Nullable public ObjectSE postProcessBeforeInstantiation(ClassSE<?> beanClass, StringSE beanName)
      インターフェースからコピーされた説明: InstantiationAwareBeanPostProcessor
      ターゲット Bean がインスタンス化される前に、この BeanPostProcessor を適用します。返される Bean オブジェクトは、ターゲット Bean の代わりに使用するプロキシであり、ターゲット Bean のデフォルトのインスタンス化を効果的に抑制します。

      このメソッドによって null 以外のオブジェクトが返された場合、Bean 作成プロセスは短絡されます。適用される追加の処理は、構成された BeanPostProcessors からの BeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String) コールバックのみです。

      このコールバックは、Bean クラスを持つ Bean 定義、および返された Bean 型がここに渡されるファクトリメソッド定義に適用されます。

      ポストプロセッサーは、ここで返される Bean オブジェクトの型を予測するために、拡張 SmartInstantiationAwareBeanPostProcessor インターフェースを実装できます。

      デフォルトの実装は null を返します。

      次で指定:
      インターフェース InstantiationAwareBeanPostProcessorpostProcessBeforeInstantiation 
      パラメーター:
      beanClass - インスタンス化される Bean のクラス
      beanName - Bean の名前
      戻り値:
      ターゲット Bean のデフォルトのインスタンスの代わりに公開する Bean オブジェクト、またはデフォルトのインスタンス化を続行する null 
      関連事項:
    • postProcessProperties

      public PropertyValues postProcessProperties(PropertyValues pvs, ObjectSE bean, StringSE beanName)
      インターフェースからコピーされた説明: InstantiationAwareBeanPostProcessor
      ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。

      デフォルトの実装は、指定された pvs をそのまま返します。

      次で指定:
      インターフェース InstantiationAwareBeanPostProcessorpostProcessProperties 
      パラメーター:
      pvs - ファクトリが適用しようとしているプロパティ値 (非 null)
      bean - Bean インスタンスは作成されましたが、そのプロパティはまだ設定されていません
      beanName - Bean の名前
      戻り値:
      指定された Bean に適用する実際のプロパティ値(渡された PropertyValues インスタンスにすることができます)、またはプロパティの入力をスキップする null 
    • postProcessAfterInitialization

      @Nullable public ObjectSE postProcessAfterInitialization(@Nullable ObjectSE bean, StringSE beanName)
      Bean がサブクラスによってプロキシするものとして識別される場合、設定されたインターセプターでプロキシを作成します。
      次で指定:
      インターフェース BeanPostProcessorpostProcessAfterInitialization 
      パラメーター:
      bean - 新しい Bean インスタンス
      beanName - Bean の名前
      戻り値:
      使用する Bean インスタンス。元のインスタンスまたはラップされたインスタンス。null の場合、後続の BeanPostProcessors は呼び出されません
      関連事項:
    • getCacheKey

      protected ObjectSE getCacheKey(ClassSE<?> beanClass, @Nullable StringSE beanName)
      指定された Bean クラスと Bean 名のキャッシュキーを作成します。

      メモ: 4.2.3 以降、この実装は連結されたクラス / 名前の文字列を返すのではなく、可能な限り最も効率的なキャッシュキーを返します。: プレーンな Bean 名。FactoryBean の場合は BeanFactory.FACTORY_BEAN_PREFIX が前に付加されます。または、Bean 名が指定されていない場合は、指定された Bean Class がそのまま使用されます。

      パラメーター:
      beanClass - Bean クラス
      beanName - Bean 名
      戻り値:
      指定されたクラスと名前のキャッシュキー
    • wrapIfNecessary

      protected ObjectSE wrapIfNecessary(ObjectSE bean, StringSE beanName, ObjectSE cacheKey)
      必要に応じて、つまりプロキシ化の対象となる場合は、指定された Bean をラップします。
      パラメーター:
      bean - 生の Bean インスタンス
      beanName - Bean の名前
      cacheKey - メタデータアクセスのキャッシュキー
      戻り値:
      Bean または生の Bean インスタンスをそのままラップするプロキシ
    • isInfrastructureClass

      protected boolean isInfrastructureClass(ClassSE<?> beanClass)
      指定された Bean クラスが、決してプロキシされるべきではないインフラストラクチャクラスを表すかどうかを返します。

      デフォルトの実装では、アドバイス、アドバイザ、AopInfrastructureBeans をインフラストラクチャクラスと見なします。

      パラメーター:
      beanClass - Bean のクラス
      戻り値:
      Bean がインフラストラクチャクラスを表すかどうか
      関連事項:
    • shouldSkip

      protected boolean shouldSkip(ClassSE<?> beanClass, StringSE beanName)
      指定された Bean がこのポストプロセッサーによる自動プロキシと見なされない場合、サブクラスはこのメソッドをオーバーライドして true を返す必要があります。

      時々、これが起こるのを避けることができるようにする必要があります。循環参照につながる場合、または既存のターゲットインスタンスを保持する必要がある場合。この実装は、Bean 名が AutowireCapableBeanFactory の規則に従って「元のインスタンス」を示さない限り、false を返します。

      パラメーター:
      beanClass - Bean のクラス
      beanName - Bean の名前
      戻り値:
      指定された Bean をスキップするかどうか
      関連事項:
    • getCustomTargetSource

      @Nullable protected TargetSource getCustomTargetSource(ClassSE<?> beanClass, StringSE beanName)
      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

      protected boolean shouldProxyTargetClass(ClassSE<?> beanClass, @Nullable StringSE beanName)
      指定された 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

      protected void customizeProxyFactory(ProxyFactory proxyFactory)
      サブクラスは、これを実装することを選択できます。たとえば、公開されているインターフェースを変更するためです。

      デフォルトの実装は空です。

      パラメーター:
      proxyFactory - TargetSource およびインターフェースですでに構成されており、このメソッドが戻った直後にプロキシを作成するために使用される ProxyFactory
    • getAdvicesAndAdvisorsForBean

      @Nullable protected abstract ObjectSE[] getAdvicesAndAdvisorsForBean(ClassSE<?> beanClass, StringSE beanName, @Nullable TargetSource customTargetSource) throws BeansException
      指定された Bean がプロキシされるかどうか、適用する追加のアドバイス(AOP アライアンスインターセプターなど)およびアドバイザーを返します。
      パラメーター:
      beanClass - アドバイスする Bean のクラス
      beanName - Bean の名前
      customTargetSource - getCustomTargetSource(java.lang.Class<?>, java.lang.String) メソッドによって返された TargetSource: は無視できます。カスタムターゲットソースが使用されていない場合は、null になります。
      戻り値:
      特定の Bean の追加インターセプターの配列。または追加のインターセプターではなく、一般的なインターセプターのみの場合は空の配列。または、プロキシがまったくない場合は null で、一般的なインターセプターさえ使用していません。定数 DO_NOT_PROXY および PROXY_WITHOUT_ADDITIONAL_INTERCEPTORS を参照してください。
      例外:
      BeansException - エラーの場合
      関連事項: