spring bootソース解析20-spring boot aop自動化配置


前言
springの中でaopは核心の概念で、spring bootはどのように自動化の配置を実現したのですか?今から分析します.
解析
spring bootで自動化された構成は読み取り/META-INF/spring.factoresで読み込まれたorg.springframbook.boot.atofigre.EnbaleAutoConfigrationの設定の値です.ここでaopに関するものは一つだけです.つまりorg.sprigframe book.boot.atofigfrome.atofigfigfiglook.が開いています.
  • AopAutoConfigrationは次のような注釈を示しています.
  • @Configration–構成類
  • @Coditional Onclass({EnbaleAsppectJAtoxy.class、Asppect.class、Advice.class])–現在のクラスパスの下にEnbaleAspectJAtoxy.class、Advice.classがあります.この構成は解析されます.
  • @Coditional OnPropty(prefix=「spring.aop」,name=「aut」,havingValue=「true」,matchIfMissing=true)–spring.aop.aut=trueが配置されている場合に有効になります.配置されていない場合には、デフォルトで有効になります.
  • AopAutoConfigrationには2つの内部クラスしかありません.
  • JdkDynamicAutoProxConfigration、コードは以下の通りです.
  • @Configration–構成類
  • @EnbaleAspect JAtooxy(proxyTarget Class=false)–aop注解を開いて、この注解について、後に解析があります.
  • @Coditional OnPropty(prefix=「spring.aop」,name=「proxy-targ-class」,havingValue=「false」,matchIfMissing=true)–spring.aop.proxy-targ-class=falseが配置されている場合は、デフォルト設定が有効になりません.
  • CglibAutoProxyConfigration、コードは以下の通りです.
  • @Configration–構成類
  • @EnbaleAspect JAtoxy(proxyTarget Class=false)–aop注解を開く
  • @Coditional OnPropty(prefix=「spring.aop」、name=「proxy-targt class」、having Value=「true」、matchIfMissing=false)–spring.aop.proxy-targ-class=trueが配置されている場合は、デフォルト設定は有効ではなく、7956.
  • したがって、aopのデフォルト効果はJdkDynamicAutoProxyConfigrationです.これも私たちのspring aopについての認識に合致しています.デフォルトはjdkを使用しています.種類に向かっての代理を使うなら、spring.aop.proxy-targt clast=trueを配置して、cglibを使用して代理を行う必要があります.
  • @EnbaleAspectJAtoxyコードは以下の通りです.
    ターゲット内部の自己呼び出しについては、カットの強化ができなくなります.Spring事務処理時の自己呼び出しの解決策と、いくつかの実現方式のリスクを参照してください.
    ここで@Importを通じて(AsppectJAtoxyRegistral.class)Aspect JAtoxyRegistarの配置を導入しました.やはり前の文章から分かります.ここでConfigrationClass Parsserを呼び出します.Aspect JAtoxyRegistrarによってImporarインターフェースが実現されました.したがって、JdkDynamicAutoProxConfigrationに対応するConfigrationClassのimportBenDefinitionRegistrasに参加します.最後に、ConfigrationClass BeanDefinitionReaderでは、importBenDefinitions Registrarsでは、importBenDefinitionRegistrasに対して、順次、そのregister BenDefinitions方法を呼び出します.Aspect JAtoxyRegistrar.
  • 登録idはorg.springframe ebook.aop.com nfig.internal AutoxyCreatorで、classはAnnotationAwareAsplact JAtoxyCreatorのbeanです.ここでは何層もの呼び出しを経て、最終的にAopConfigUtilsを呼び出します.
  • ここに入ってきたclsはAnnotationAwareAspect JAtoxyCreator.lass
  • です.
  • 自動プロキシ作成器が存在し、存在する自動プロキシ作成器が現状と一致していない場合、優先度によってどれを使うべきかを判断する必要があります.AnnotationAwareAspect JAtoxyCreatorに置き換えて、直接return
  • 自動代理作成器が既に存在しており、作成するものと一致する場合は、
  • を再作成する必要がない.
  • で登録します.idはorg.springframe ebook.aop.com fig.internal AutoxyCreatorで、classはAnnotationAwareAsplactJAtoxyCreatorで、優先順位はInteger.MIN_です.VALE.キャラクターは内部用
  • proxyTarget Classがtrueに等しい場合、IDはorg.springframe ebook.aop.com fig.internal AutoProxyCreatorのBean DefinitionにproxyTarget Classの属性を追加し、値はtrueです.コードは以下の通りです.
  • exposeProxyがtrueに等しい場合、IDはorg.springframe ebook.aop.com fig.internalAutoProxCreatorのBenDefinitionにexposeProxyの属性を追加し、true.コードは以下の通りである.
  • aopのソースコードについては、筆者はspringの深度公開において、一緒に来るつもりです.spring bootのaop自動化配置についてはここまで解析します.