Springboot空のポストプロセッサ
4213 ワード
空のポストプロセッサ
@Beanまたは構成部品スキャンを使用して登録スプリングをスキャンすると、ターゲットオブジェクトが作成され、スプリングコンテナ内の空のリポジトリに登録されます.
次に、登録されたスプリングシートをスプリングコンテナで問い合わせることができます.
空のポストプロセッサ-BeanPostProcesser
生成されたオブジェクトを空のリポジトリに登録する前に操作する場合は、空のポストプロセッサを使用します.
空を生成し、何かを処理するために使用します.
空のポストプロセッサ機能
オブジェクトを操作するか、まったく異なるオブジェクトに置き換えることができます.
空の登録と空の後処理
生成
使用例
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
「自動起動
implementation 'org.springframework.boot:spring-boot-starter-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には、特別な点カット式を適用することができる.
Reference
この問題について(Springboot空のポストプロセッサ), 我々は、より多くの情報をここで見つけました https://velog.io/@fj2008/Springboot-빈-후처리기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol