Springboot空のポストプロセッサ


空のポストプロセッサ


@Beanまたは構成部品スキャンを使用して登録スプリングをスキャンすると、ターゲットオブジェクトが作成され、スプリングコンテナ内の空のリポジトリに登録されます.
次に、登録されたスプリングシートをスプリングコンテナで問い合わせることができます.

空のポストプロセッサ-BeanPostProcesser


生成されたオブジェクトを空のリポジトリに登録する前に操作する場合は、空のポストプロセッサを使用します.
空を生成し、何かを処理するために使用します.

空のポストプロセッサ機能


オブジェクトを操作するか、まったく異なるオブジェクトに置き換えることができます.

空の登録と空の後処理


生成
  • :スプリング空オブジェクトの生成
  • 転送
  • :生成するオブジェクトを空のリポジトリに登録する前に空のポストプロセッサ
  • に転送する.
  • ポストプロセスタスク:空のポストプロセスは、渡されたスプリング空のオブジェクトを操作したり、他のオブジェクトに置き換えたりすることができます.
  • 登録:空のプロセッサは空に戻ります.渡されたNull値を返すと、Null値が登録され、置き換えられると、他のオブジェクトがNullリポジトリに登録されます.
  • 使用例


    Aオブジェクトは空の登録を行い、空のプロセッサは空のオブジェクトをBオブジェクトに置き換え、Bオブジェクトを登録する.
    
     @Slf4j
        static class AToBPostProcessor implements BeanPostProcessor{
            @Override
            public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
                log.info("beanName={} bean={}",beanName,bean);
                if(bean instanceof A){
                    return new B();
                }
                return bean;
            }
        }
    対応するBeanPostProcessorをSpringBinとして登録すると、Springコンテナは空後処理として認識して操作します.

    整理する


    空のポストプロセッサは、空のポストプロセッサを操作および変更できるポイントです.
    空のオブジェクトを操作したり、他のオブジェクトに置き換えたりできるほど強力です.
    ここで、アクションは、オブジェクトを呼び出す特定のメソッドを意味します.
    通常、スプリングコンテナに登録されているギャップ(特に素子スキャンターゲットとしてのギャップ)は、中間で動作せず、空のポストプロセッサを使用します.
    開発者が登録したすべての空は、中間で操作できます.

    @PostConstructの秘密


    @PostConstructはスプリング空格子点を作成した後に空格子点を初期化する役割を果たした.でも考えてみれば.
    @PostConstruct付きの初期化メソッドを一度呼び出すだけです.
    簡単に言えば、生成された空を一度操作します.
    したがって,適切な空後プロセッサがあれば空の動作を操作することができる.
    Springでは、@PostConstructコメント付きメソッドを呼び出す「CommonAnnotationBeanProcessor」という空のポストプロセッサが自動的に登録されます.
    従って、スプリング自体も空のポストプロセッサを用いてスプリング内部の機能を拡張する.

    キー(Key)


    代理オブジェクトに適用するかどうかはパッケージ基準で設定されていますが、ポイントカットを使用するとよりきれいになる可能性があります.
    フォーカスレンズはすでにレベルですメソッド単位のフィルタ機能があるため、エージェントに適用するかどうかを正確に設定できます.
    ちなみに、コンサルタントにはポイント写真があります.そのため、コンサルタントを通じて重点レンズを確認することができます.
    スプリングAOPは、ポイントカットを使用して代理オブジェクトに適用されるかどうかを確認します.
    ポイントカットを使用する位置
    1.エージェントが適用されるかどうかを確認し、必要な場所でのみエージェントを適用する
    2.エージェントのどのメッセージが呼び出されたときにデバイスが適用されるかを判断します.

    スプリングが提供する空のポストプロセッサ

    implementation 'org.springframework.boot:spring-boot-starter-aop'

    自動エージェントジェネレータ-AutoProxyCreator


    「自動起動
  • スプリング」が「AnnotationaWARE AssociationAutoProxyCreator」に設定されている空のポストプロセッサは、自動的に「スプリング」に登録されます.
  • 名に示すように、エージェントの空のポストプロセッサが自動的に生成されます.
  • がアイドルになると、プロセッサはSpring Binに登録されているAdvisorを自動的に検索し、エージェントが必要な場所でエージェントを自動的に適用します.
  • Advisorにはすでに切り込み点とadviceが含まれています.そのため、コンサルタントがPointcutを含むことを知っていれば、
    エージェントを適用すべきかどうかを知ることができます.次に、付加機能を付加機能として使用します.
  • AnnotationAwareAsspectAutoProxyCreatorは、@AsspectJに関連するAOP機能も自動的に検索して処理します.
    Advisorだけでなく、@Asspectを自動的に認識し、エージェントを作成してAOPを適用します.
    自動エージェントジェネレータの実行手順
    1.作成:スプリングが空のターゲットとなるオブジェクトを作成する
    2.転送:生成したオブジェクトを空のリポジトリに登録する前の空後処理転送
    3.すべてのAdvisor空クエリー:自動エージェントジェネレータ-空のプロセッサはSpringコンテナですべてのAdvisorをクエリーします.
    4.エージェント適用オブジェクトを確認する:以前にクエリーしたコンサルタントに含まれていたポイントカットを使用して、そのオブジェクトがエージェントに適用されるかどうかを確認します.
    正否を判断する.オブジェクトのクラス情報だけでなく、オブジェクトのすべてのメソッド(各ポイントカット)も一致します.だから一つの条件を満たすだけです.
    エージェントの適用対象となる.たとえば、10のプロキシサーバのうち1つだけが要件を満たしています.
    5.エージェント作成がエージェントに適用される場合、エージェントを作成して戻し、エージェントをスプリング空席として登録します.
    6.空の登録:返されるオブジェクトはspring空に登録されます.

    使用例は簡単です

        @Bean
        public Advisor getAdvisor(LogTrace logTrace) {
            //poincut
            NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut();
            pointcut.setMappedNames("request*" , "order*","save*");
            LogTraceAdvice advice = new LogTraceAdvice(logTrace);
            return new DefaultPointcutAdvisor(pointcut,advice);
        }
    
    上記のように、内部はコンサルタント登録が空の場合にのみ自動的に実行されます.

    アクセントレンズは2種類あります。

  • エージェントを適用するかどうかを確認します.->作成手順
  • すべてのメソッド(条件を満たすメソッドがある場合)をチェックし、プロキシ作成がない場合は、ソースオブジェクト
  • を登録します.
  • デバイスを適用するかどうかを決定する->使用フェーズ
  • エージェントが呼び出されると、キーマップに基づいて追加機能が適用されるか否かを判断するデバイス.
  • AspectJExpressionPointcut


    AspectJというAOPには、特別な点カット式を適用することができる.