【框架源码】Spring源码解析之BeanDefinition加载流程解析

news2024/11/25 18:37:49

观看本文之前,我们先思考一个问题,Spring是如何描述Bean对象的?

Spring是根据BeanDefinition来创建Bean对象,BeanDefinition就是Spring中表示Bean定义。BeanDefinition用来存储Bean的相关信息,主要包括:Bean的属性、是否单例、延迟加载、Bean的名称、构造方法等。

简言之就是Spring通过解析xml然后生成BeanDefinition对象,存储到Map里面。

在这里插入图片描述

ok,我们现在来根据源码走一遍BeanDefinition的创建过程。

AbstractApplicationContext#refresh#obtainFreshBeanFactory方法

在这里插入图片描述

走到方法里面一共是两个方法。

  • refreshBeanFactory:初始化BeanFactory
  • getBeanFactory:返回实例化的BeanFactory

在这里插入图片描述

走到refreshBeanFactory()方法内部。

在这里插入图片描述

方法内部先是做了一个关闭之前创建的BeanFactory。然后创建新的BeanFactory,调用customizeBeanFactory对BeanFactory进行自定义设置。然后就是核心方法loadBeanDefinitions(),这个方法是读取xml文件读取bean的定义。最后赋值到该类的BeanFactory中。

在这里插入图片描述

点击查看这个类下的实现方法。

在这里插入图片描述

然后走到loadBeanDefinitions(),还是掉用loadBeanDefinitions()方法。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

ok,到了这个方法,才开始执行真正的逻辑,通过读取资源载入Bean定义信息。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

OK,整一个创建的流程,就走完啦,从解析xml,到封装成BeanDefinition,最后放入map中的核心流程。

方法调用栈

在这里插入图片描述
方法调用栈时序图链接:

https://viewer.diagrams.net/index.html?tags={}&highlight=0000ff&edit=_blank&layers=1&nav=1&page-id=C1lZVwBWBivODLPyhwKg&title=JVM(2)(5)(1).drawio#R%3Cmxfile%20pages%3D%2213%22%3E%3Cdiagram%20name%3D%22%E7%AC%AC%201%20%E9%A1%B5%22%20id%3D%22-cb5Gx7PJG9Mc2EnYWt2%22%3E7ZtBb5swFMc%2FjY%2BTAjbEHCGh3aXapB56JsENqAQj4ixJP%2F0MMU2ImbpJ0GfIeil5Bgf%2F%2Fs%2F4%2FU2L8GJ7fCyjInniMcuQPYuPCC%2BRbVuWR%2BSvKnI6R1xLBTZlGquTLoHn9J2p4ExF92nMdq0TBeeZSIt2cM3znK1FKxaVJT%2B0T3vlWftbi2jDtMDzOsr06Esai6QZl%2BtdGr6zdJOor6b2%2FNywjZqT1Uh2SRTzw1UIhwgvSs7F%2BWh7XLCsgtdwOV%2F38IfWjxsrWS7%2B5oLTW3nCP%2FYFeXwpsLNKfp740zfVy68o26sBq5sVp4ZAyfd5zKpOZggHhyQV7LmI1lXrQWouY4nYZvKTJQ9f0yxb8IyX9bWY1T8yvhMlf2NXLdjFHpadBvowmntipWDHq5Aa1iPjWybKkzxFtdpUIVY55qmPh4tgTSi5koqoWKRSZPPR8YWiPFAg%2FwGq3TPUHhARYhYiPGzerWO2oquh886dmQWV6FBDB%2FlL5FEUuiggKAjqyAMKPBRSFFjItzTwcvSiTTfK0k0uj9eSFZMgg4pRKh%2BSvmrYpnFcXR6UbJe%2BR6u6q0q2gqe5qMfpBMhZVn3tBd%2BdH%2FOWJlDOc3ajpgr18Zjw2nK5ulzzDrnwUHI5nXLRh0ofeeAFyAsr3eQSGrh3rJs7cz7TjX6lbm6HblKlBfJ9FEqtliiQAs4r3Xx6NyoR51OV3K9UaT7FysaeAS8xdApU8fyGKgGm6vVMdQhG0JnXGEKTIBHXNEh9%2B7khIEHPNqtvfwZiPhzHtNzr29MNsX6C516HRxvfAqrlHjjWDi81vintEtOmdIfVGV%2B2aljBs3Wa3oRCY52mOQHHOgJ3gm1gSM33mwRJW6WhM8kegTuBz6RJuBPN9IHn3gjcCXzuTdKdwGOdpjsBn9KTdCfw2drhTjpfR1IP0WX1oov6dcRFMiPo%2FbyXtG4NEPSLSXsSBuh2VSTQuyB23wbICF9JoHdBmmlgUkWmQYLOPTwCywQPqW%2FLNAQk8OnWd20%2FxKMeHNLAlTqMAYLHOokN79tKHR7rNOs9aF%2BJp1nvQWNtOjZpAbqF5ECbb2JgvactJ%2BCZNIJ6Dz6TRlDvwUOaZL0Hj3WS9R481o56r3NnVt4VDf%2FvzF5WLOidWWLg31BoOxTQy3rzFDMJklb7QO91OQYWiJoxBodkYIGoQRpuusmPl38rr9uu%2Fjkfh78B%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22_SugJZrRnb5-nyEQGYxC%22%20name%3D%22%E7%AC%AC%202%20%E9%A1%B5%22%3E5Vpdd5owGP41XG6HEBLwsmrXnW09PZsX%2B7iLECFdJC7Gqv31CxCqELV287QKtqeneRLeQJ7nyceLDhxMVzeSzNJbEVPueG68cuDQ8bwe8vXfHFiXAAYGSCSLSwhsgBF7pAZ0DbpgMZ3XGiohuGKzOhiJLKORqmFESrGsN5sIXu91RhJqAaOIcBv9zmKVGhTg3qbiI2VJaroOvaCsmJKqsXmSeUpisdyC4LXjYceDK%2BLAvpNj9V84kEKoZ5tVjaerAeX52FfjWvb74d8DPD27pJk6UczJGv6ZfL2Nfn260pi4%2B8z78p3p6IHwhRl2M2RqXfEgxSKLaR4E6B6XKVN0NCNRXrvUwtNYqqbcVE8Y5wPBhSyuhROU%2F2h8rqT4TbdqcPHJrxCZ2sLLT%2FFoxY1Rqehq76CAY9hsjssNFVOq5FqXTWTPN0oxVgGVcpYb4SFksHRbcwYjRuvJU%2BgXcaXbGrpOy25okUlj7TFTFFKlIhEZ4dcbtL%2BhW%2FfT37T5IsTMkHxPlVqbCYMslKhLoOwz7%2Bgwbfq%2BxEJG9MD9GzEqIhOqDrTD%2FykDSTlR7KF%2Bw2fKqWc59kb35X7LJ6z91nVfbN0Y0TD2d1k39MawsO6rWjRoWBTaFgXuDovi87Yo7CadvttOOv1u0olgO%2BlE3aQT43bS2XuL%2FZAmR65%2F5Ne%2FR1XxpwlXFIarWmltSifcR%2BEj91FBh%2FZR2LL23fhen2OBpZEWGbu5i%2FKqQ82FGxvYrF3WSSc40qFlcqYjFgWwo%2FP10WrwOqSGYM%2BEfShj1boJG1ZZ3UufsN09bNqWbxGboMGmX5UvnU07KVWy6beZTYhbyubBJIY7ovbZV4%2B2qlNHOEsy%2FX%2BkR51qlvo5Jywi%2FMpUTFkclws2nbNHMi5C5ZqYCZapYmRQ30HDPJZeo%2Bflcg0s9jOR0YZUDPSaWvAbzg5CSwq9HUqAZ66EN3mBcAYbMICO3YF16dUD6Gr%2B5Hg5dCmDAuzsaLnqo5Ou%2BpMwolG0a9Ufh8hH7ivP9LjaurYthbIvIRa0ms2wziZsyx5u32kZt5nN5msoH58rm0XbZ75kZOJtfbsLXv8F%3C%2Fdiagram%3E%3Cdiagram%20id%3D%223HVVyE41luBXF9ZPOKGQ%22%20name%3D%22%E7%AC%AC%203%20%E9%A1%B5%22%3E3Vhbc6IwGP01eeyOEEB4BKTd6ezOdqYP3e1bhBTSRuKEeOuv3y8QFLS22lpnt%2Bo45Hy3XL5zUotwPFleSTItfoqMcmQPsiXCI2TbgevAtwZWDeBZBsglyxrI2gC37JkacGDQGcto1XNUQnDFpn0wFWVJU9XDiJRi0Xd7ELxfdUpyugPcpoTvoncsU4VBLS%2FYGL5TlhemtG8PG8OEtM5mJVVBMrHoQDhBtodsvCQIR0hj%2FQ%2BOpRDqTbfWebKMKdd73%2B5rU%2Ffy%2FQnWa5e0VCfKeXFvFdfj8CblF3dPz%2F71fXGTX5iWqNSq3XaawSmYoZCqELkoCU82aCTFrMyozgp1oo3PDyGmAFoAPlKlVqalyEwJgAo14cYKa5Kr3zr%2Bm9sO%2F5h09WC07I1WZtTMVU9w7y4ZqBIzmdJX1t02NJE5Va%2F44UPaZXvjr6iYUJg4jCXlRLF5f8LEMCNf%2Bx1Xo60USklWnXxTwUpVvS%2FbZvY3OgsMjI5gbFhkZMT2j%2BvEg4p4g9MVwTHENVtz3MFBWOfsDuVZHVVT7bTMNL0yJ3xmuufX%2BBF01tphbJ%2BPi4Ipejsldfsv4Gboc%2B%2BBcR4LLmQdix9c%2Fda4KFUHb16AV0qKJ9qxePVrzcY5lYouX%2BfjB%2FhjMtvDfn%2Fgtl8WnZvBSOSg6FwK3mA%2F5Y4Q0886ZPdfkl%2FrfPKLD5Tfj7bP%2Fy%2B%2F28qIP0N%2BtzX%2BI0W%2BiPziPfJrn1Z%2B%2FZSm6UsyO%2FZdxx2cWWZd52vKrLdzmJCdw9yjjM3hMdeP7fWauCiKUeCiZIgCB4V%2Be%2FDJpTb48XoM9hD5Dkp8FCYohFBPx0UDnSMIIBQlDop8FGmbiW4rw1o7xffOx943H2trPtZ75wNOfoCA8doWodA1TqHTPoQ6PgT%2FQKeOrDo1hGAUjYyPP9Img4BpiPywLg%2FWBCVY5%2FftfWvfYhR0uurThnCWl%2FCcQsdTYEik%2BcDgt2JoDBOWZc3tSCv2TMZ1Kk0fI8qQ142QO9K54EKsmrvR2mFeKUq6RVMDnfXPHbfPQ%2BcFHjrWCzx0zs3D2veNH8uttG%2F%2BS4GTvw%3D%3D%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22OrcwUQb7W9XxHKOJm_kC%22%20name%3D%22%E7%AC%AC%204%20%E9%A1%B5%22%3E7Zxtj9o4EMc%2FjV%2BeROIkOC8TYLfqqe2d9qR7ecoSL6QNGIVQ2H76c4LTXezcbVsFSP5mhVYwMQ7ObzzjGT8QOlkd7otks%2FwgUp4Td5QeCJ0S1w19T%2F6vBM9HQeAowaLI0qPIeRE8ZN%2B4Eo6UdJelfHtSsBQiL7PNqXAu1ms%2BL09kSVGI%2FWmxJ5Gf3nWTLLgheJgnuSn9O0vLpZI6Qfhy4R3PFkt1a%2BaOjxdWSVNYtWS7TFKxfyWiM%2BIGxKWHhNCYVLLTF50UQpRvFmsKrw4TnlfPvnmux%2Fve%2FXoF39te8HXZVZ3Rxz%2Ff7%2F74sv6Uf%2F79n7%2Fij%2FRd9Ju60dck36nHrh5Z%2BdxwKMRunfKqElltvF9mJX%2FYJPPq6l4qnpQty1UuPzny7VOW5xORi6L%2BLuX1n5Rvy0J84a%2Bu0ICGNK2bUP8AXpT88J%2BNd36Emt7%2Bey5WvCye5WdVs8uURqguEaqP%2Bxf9akTLV5rlKVmiNHrxveKfIiLLKijdMnQ7ZnhJIp6HSISet1fNU%2F7IHnvTq4IRIkPPZDjzSTQlISOzgMQeieNackfikMwYiR0SOQZn%2BfzLU5hJni3W8v1ccuCSW1xRyqTfi9SFVZam1dfjgm%2Bzb8ljXVWlJRuRrcv6afkx8adVXbtSbI%2Be2zH0YS3WXFMeJbqozQ1PtSMwtWPcoh2039rht2oHu6vUQb4JYxLOKjUJpZoENzX5ESPiv6UmbHhqErSoiVSKCYkiMpOqMSWx1JdxpSYRuymFMTrw31SKYHhKMbZ6zO2OTIgDHB4wqyDSsQbRg4AYdgzxqkgw%2BlWTfRokEy%2FAZNJ1luiqTDBMl9N11qffOQbfx%2BxZXWeKrjqyA%2BlZLbG9TT0LhKLlURbDoGh5mAVCESnOoi4Ek6YVg2Ri%2BCyMftIgsGTkYURmIBSRxvQo1q5lNhd4HKHbRxSKdkVmun1EodgSmbVOmbOQsGk1O8qiWhIQaZzYbe7cUBRHD%2F4wJs9du4K%2FQFsK5zXrdQfe3bsO%2FvpNcUwhKdKuQ5NLMmGuxsTHYDLkQCN0MJnYFWgYFEGsnV2TB4Z9BKHY9fjxmuMIn2IwGfJUgGHtQggmzc8bJBPddoH0E2%2FIS670SBaFSdcxUL9HBUYkizFC99o3dpnpR9k2NrulH99WFD396GGkH72uZxuu6RZRhipnTiY%2BJWmY%2Bm0mOOGeQ91Lm2BtBghjZ20zOXligb1qJ1w4fbXH1idsQuKoNsV31etmeHX10JYmYWytDc6cfOlZH9cHyyAr24MzT971jKKeGkChaJe%2F1UdNIBQbJ2AJRT1wRaF45vRDzygafhFjX8r4zGcD9Yyi4RdBKJ55mrdnFA2%2FCELxzOtJe0bR8IsgFFsO2QGmaPhFjF0TY7uifsMvglC0K%2Bo3%2FCIIRbuifsMvYlBsWmEJRd0vguyWaSacLaGo%2B0UUinblbnS%2FiELRrtyN7hdRKNqVu9F3dIMs7mZ25W70Hd0oFO3K3eg7ulEo2pW70U8EQqFoV%2B7G8IsYy5uZXbkbwy9iUGx%2BsiUUDb8IQtGu3I3hF0Eo2pW7Mfwixs6B0K7cjeEXQSjalbsx%2FCIIRbtyN4ZfBKFoV%2B5G94sgm5pDu3I3ul9EoWhX7kb3iygU7crd6H4RhKLTbDex5JwI49xKjLDfGSEdwQIy5nRGXSdjLgnFOFEFBQrSQZS99UJ12UKI8n9Kqvru5RNdfhApr2r9Fw%3D%3D%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22wDRTaJAWb6luR01DepKv%22%20name%3D%22%E7%AC%AC%205%20%E9%A1%B5%22%3E7ZjbjpswFEW%2Fxo%2BRAIOBR0iYS6WqUqOqnUcSO8EaglPH5NKvr21MAoHRMNU0pWpJFJlt%2B%2Fiyl8wJAE43x3uebrOPDJMcOBY%2BAjgDjhN6rvxVwqkSkG2ENae4kuyLMKc%2FiBEto5YUk12roWAsF3TbFpesKMhStLSUc3ZoN1uxvD3qNl2TjjBfpnlX%2FUqxyIxqo%2FBS8UDoOjNDB45fVWzSurFZyS5LMTs0JJgABwEHHlMAY6C09hdOOWPi1WZ1481xSnK19%2FW%2BVuPe%2FXqA89o5KcQ7xUwJmzx%2FKecf4senySP6HIlvs4lTDbRP89Jsu9kycap94KwsMFFBZNj4kFFB5tt0qWoPEjypZWKTyztbFlc0z6csZ1z3hURfUt8Jzp5JowYiGEKsl6AnQLggxxcXbw9x7Xr994RtiOAneV9HRoaIUw2TuT9cAEOe0bIGW9A3YmqgXp9jv8kU2db48r42wt9r4ypc%2BarrSGw8H1G1jX7XRhj02Oh447bR7bER5XLyMaZ7WVyrIkgCIBcX2CDxQByC2AWJC%2BIYRJIC65M8ZaUeTEEc1Z3ldJv9%2B0LKHjMQWaogfwMEEh9EoYqRhCD09SA%2BCCMQuGqnYB1kwa%2FDXg%2F2nhh66tOHIdKX6sEK0cRTXzfGEw3A0%2B47ZcaOpzcEzwSTYjB4gWyhdusPwIQ9EmC3D6bAWUAN003PNK8NjRS60KAeaGx33NCgIdDMS76ne8Yn1mB07P%2FomMguHICO04MOGjc5%2FpvIsfuNrzH5d%2ByHVs%2Fj5i%2B0P%2BjanyAQIhBbOhdxQXh3znyeWLFu5D3WkIzGrhKZKzKkY6Jtf9vmghXkigkjpTldF%2FJ2KR0mUo%2BV%2F1T%2BoY1MxYZirIbp5a1N5C0BOgNTAxR0AXKsHoDguAEKXzw%2FVJbYch19L1ldMdnpVyGKItvdHqtHiqlvJsyaqgcizevmypejqBrqhYdQl7XhDHEi55kudChFzJbRQmgjvBh4MxWrFKxay5swvunZ5bbR68uUR0GebvvKSyETr%2FE2DiY%2FAQ%3D%3D%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22hh70b5QFpDC6NbvWQIRu%22%20name%3D%22%E7%AC%AC%206%20%E9%A1%B5%22%3E7VxRb5swEP41fpxUbEPMIyS01aap0vLQvVJwEzSCM0KWtL9%2Bhpg12EzpJprAkSpS4XBM7O%2B7892HBSLT1f4uD9fLryLmKcI38R6RGcLYooTKf6Xl5WCZuMqwyJNYNXozzJNXrow3yrpNYr5pNCyESItk3TRGIst4VDRsYZ6LXbPZs0ibd12HC24Y5lGYmtbHJC6Wymo57tuFe54slurWDE8OF1Zh3ViNZLMMY7E7MpEAYQdhsg8R8VFpa37INBeiONmsbrzaT3laTn49r4f73v5%2FB3%2FGnvOs6KhP%2FMBJlH7Lf94%2FfnmYc%2FLZ%2Bx59Ujf6FaZbNe1qyoqXGodcbLOYl53Ibv3dMin4fB1G5dWdZJ60LYtVKs8seficpOlUpCKvvkt49SftmyIXP%2FjRFeIQl8TVEKofwPOC7%2F86eOs9qOnjv%2BNixYv8RZ6rnjFTjFAu4arT3Ru%2FatPyiFlU2ULF6MWfjv8JEdlWgdIthrhjDM%2BJCKUQESEf61VRzJ%2FYU2%2B8yrmBiCE1MQxs5M2Qy1DgIJ8i368st8h3UcCQbyHPMnCW8180wQzTZJHJ40jiwCVufolSItc9T11YJXFcft3P%2BSZ5DZ%2BqrkqWrEWSFdVs2T6yZ2Vf20JsDiu3ZfAhExnXyKNMZ425bpMdjsmOSQs7SL%2FZYbeyg92WdJAHro%2FcoKSJzLl850qT9wQR%2BxRN2PBo4rTQRJJiijwPBZIaM%2BRLvkxKmnjsSgojO7BPksIZHikmo8658Y0J4gDTAzYqEMlEA5GCANHtGMSLQgLDr2r1aZCYUAcmJl2rRBfFBEbosrpWffqtMdg2TM%2FqWim6aGYHxLNalB%2FAqZ3hWUBQbFFoAMdHR9PRocTHFgEFsC8aKALxxZErHgwGiiOXPICgCEnzIBgEJvUoBomJkT%2FC8BMMSfOA4ifj0jwM5QqIZ0HSPKB41rg1DygojlzzABIfx615QPHFFs2jdWMYcxGblXuAmFdZHCRpzK47xAyiWLqsAmOLGB6XrKInUBSGUI27llX6jaIuxABBkQy56DcwgZEOka6L%2FotGOyCYDLmE1xNOG8PAZFwlvC6OQVmBPriE7xmKuhADBcVxlfDGKgdj2wIZ17YFI6ICQbHr%2BvqcmOg5PZRcZcibEIw1C0ZOX%2F%2B8QWKixy4gfkKHrEfoWQEUTLrWI%2FqdFRiqEoysgH7wKzp6hqKueQCps2j7SzrMh2xybCy4PmQ7TRT9IRuF8ZCNdi2rXDK5gZJwdi2SnBMTowgAsix2LXlcdJEDgsmQBQwDEyCxC5KA0dvCrGp74k2cqr%2Bjd6CS4Dc%3D%3C%2Fdiagram%3E%3Cdiagram%20id%3D%226Tz1yiI1IElaCkeY7t71%22%20name%3D%22%E7%AC%AC%207%20%E9%A1%B5%22%3E7Vtbc9o4FP41ekzGtmxZesTgZqfb7maGnWmzbwILcGssVogA%2BfUr2zK%2BiOYGCeBmJpNYRzfrfN%2B5SFYA7M83N4IuZl95xBLgWNEGwAFwHNuFrvqTSbaFxCdaMBVxpBtVgmH8wLTQ0tJVHLFlo6HkPJHxoikc8zRlY9mQUSH4utlswpPmrAs6ZYZgOKaJKf0WR3KmpTYiVcUfLJ7O9NTY8YuKOS0b65UsZzTi65oIhsBBwIEbCmAAMlnzB%2FYF5%2FLJZmXj%2BabPkkz5pV6LeT%2B9foDd2gVL5ZHGxP7sG7735QPq%2FSN%2FXt3f%2BcPFlZ7oniYrrXatMrktcRB8lUYsG0QNG6xnsWTDBR1ntWvFPCWbyXmiSrZ6nMRJ0ucJF3lfOJlMnPFYyZdS8J%2BsVhOhEfJQvoT8BZiQbPPLxdvPQa29%2FhvG50yKrSqXI3uaEdokHFebxLoiGClZM6txy4ZIE1uTerob%2B0WgqLYal%2BPC6Lw1jAz9AkafjCzrxDBCbHUDRts1YGORcoq6yIWc8SlPaRJW0qAJbNXmC%2BcLDecPJuVWe3i6krwJNtvE8nvW%2FdrxdPGuVjXY6KHzwrYspEpt9V5Z%2Ba5eWfXLS2XHYoXZsh6nidICX4kxe0RdUEclKqZMPtIOH0g7wRIq4%2FvmC58phRxouILPgz8JCD0Q9AD5lD%2F0AYZ7mfaFjlQW0WAHTeJpqp7HCh6mrD7IbDxWYbqnK%2BZxFBVEZMv4gY7y8TKkFzxOZa4lLwDe4DEnoXMI3bmK3HVWPGIxh7uUK%2Bva9aFOIJ6N90vmrWa%2FzfRSG5FPJkvF35fwp8Gi3WpOzT3bO6378rvpvsh7ua%2FX0LknBN3WxtNG%2F6rRTBPR1glRM%2BC7lvUKc3liEpccb5LcxgrVXLJBm7FkyERMky7vERy%2FSQO1rzSSS9uxzOSy5OiZJga2f4m5JWn45msLwif8c166VSxVus%2FSlWM7be%2Fccs6zddptfwr9N3Da0MdHm6QjTtvGJzH0ymZPlU891zQvNJ%2B68M1BeST1u2xMDw0A1cYUEtdvpiQf29RDmOgZRLyl4i%2B27nJW67Z2UJ3JasklZrX%2BqUIk6naIPGJiicpvCm955OB5x5ukI9mrY36RVGmC29k04VBL0%2B%2BhPJHrfBxfH0Y96xSx5ATevbjh8Zt8EEP7sj2aJKzTp5iofdOhI%2Fmeb6CZBwQCAhUiMAgGIAhA6Ga%2Fe2aIUIqXbxcdMtteFmZuG0RIecparNGi96SF3T7cJr5BC7SHFfC8WYENVvS%2FDo9s3md1A6b9kcItD%2F0u3LyJAWT5wcn6O4m6jGh7g94VRMvbpHvjb9dBbUfhzoC659poPQyrvTO2P8Lws8OwC2EXwrBtHvHf2Ab6B9k3HrP99j3Cnuu9t31jp4kjdMx0yt%2BDo23D8wbSvPjx702%2Fy0gS2E0kHdf01A5KMvc7Ug9TmU9SCCY8P9epAEb%2FrXhZcVW41J5qYOPFpuim63cDqRhAwuxsLnvogyAEIQJEhQEEQgJIADDKqwjoYRD6WXjA%2BdEeUQED715MtN9Maad4OUNcW8RHkGlS2mtReleuJx%2FeHk677x1l8rZP%2FMdNeVhY%2Fa8TDP8H%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22uh1tqadv0flCqOQ9_13W%22%20name%3D%22%E7%AC%AC%208%20%E9%A1%B5%22%3E7VtRb6M4EP41fmwENjbmEdK0K632dFKlO91T5YKTcEviiDhNur%2F%2BbGISwERpV7mEUlClmrGxDfN9M2OPA9B4sXvM2Wr%2BQyQ8A9BJdgDdAwhd5Hjqn5a87SW%2BvtOCWZ4mptFR8JT%2B4kboGOkmTfi61lAKkcl0VRfGYrnksazJWJ6Lbb3ZVGT1UVdsxi3BU8wyW%2Fp3msi5kbokOFZ84%2Blsboam0N9XLFjZ2LzJes4Ssa2I0ARAAiDaMYAioGX1PzTOhZBnm5WNF7sxz%2FTHL7%2FrftyH3%2B%2Fg8O45X8oL9Tl%2BXt2xn%2F%2FGP5w%2F0Pfwn2fv%2Ba%2F8zgz0yrKN%2Bezmk8m3Ug%2B52CwTrjtR3UbbeSr504rFunarkKdkc7nI1J2ritM0y8YiE3nxLOLFpeRrmYufvFKDCApQUrxCMQGeS747%2BfLue7TWfP9HLhZc5m%2Fq3vSMqEGEoQRE5n57BFgJmnkFWgdOMIPp2aHrD%2BlEtTVqubAWnS%2BlRox6qsZ3sFHZspUuTjO%2BC7WVVQPzZWKK93HG1us0rmuzrvqGbhMn5hy26RYT7Pr8oFueWPb6cpqtaA63aK6U5TxjMn2tz6NNmx%2BZynFCf4pUvdABZ16JF4MzhHB9xLXY5DE3T30AQmfGxbA5rjfCjaEly2dc%2Fu7QBsMHBdwc%2BdBC%2FuMYTHwQhSB60IWQAhpZbFDGRtaxzrJ0ttREUNDkCsiRNkmpiipCU7FIk0Q%2FHuV8nf5iL0VXmhcr%2FS2Lr4sjgO91Xxsp1vu4yLUIshRL3mCTEV3TFHoNU4gc2xT6LYQqH%2BuqJUS2JZwQEBAQORoNgQcCBQsPRBEI0R2YYBB6gN7rAqUgIgVkJiDw9WMRAoGiD8k0Vl5yVZrJYpZ7SZK%2BHkTqeQU51f1%2BEIW6A%2Fb2VfShmIgqwGIwFwTjsiP1Nap9DWBtgrVhT9v8tuu2oNXrOFo9C61PbFrxCwMKqkE4rqPA86iFAtoCgq6bLPylYnDS16UUuUEMPqUxj%2BM23b5Q7GHnC8fgmDRwRp2Rd50wnPjW0L2Owf0B%2BV1GPoLBCKPgeJGbsEBPwwmc44V6TQo6kKLTpLidO0A9dweBjfx3rY6HTZuTlDoV07Stg8uNnE%2B0BILOeWPZoyUQ7WkaAg5piE75PN9KQ3ijoHp5V%2FF%2FFNrT6HdWosT9kJX4oGX0%2B5mVgG1ZCYUAR6cB2rISBISqzteNwkmRuiA6ExHtAyhVNeQpughfEuDz8ZnXgt%2BO5ymgnaf4%2Fx37sJg97VGb6wD%2FJjs8QXOf09c7PL127O%2FI1QxEuB0REKQjAq8e4TaJoKdRbgD2lAhDtqvbROiGR0D99wgtya9ht%2FMy22TNKAcewfTZNzyH7FCnzCe83WEBZB8WGDnVq2G5e2Y%2BW5JFAxG6Q4Ti7MB1gugmEZrnBdw%2B86D0VwMPOsqDwiGcBOO1KPGlfANqSScOofVFQmsr3unJQQJkJ96GA%2FUnUUA%2By4H6ou2ZX1aX1uv4m3Y0%2BQ8%3D%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22bcx1t-gJUUKlMXSx6NGo%22%20name%3D%22%E7%AC%AC%209%20%E9%A1%B5%22%3E7Vxbb6M6EP41ftwKbC7mMaRpj4600mqro%2B0rBSdBS%2BIIyG1%2F%2FbGJSQA7alqlgXWMKtWMjW2Y75sZPCYAjRe75zxazb%2FThGQAWskOoEcAoe0gh%2F3jkv1B4gdCMMvTRDQ6CV7SP0QILSFdpwkpWg1LSrMyXbWFMV0uSVy2ZFGe02272ZRm7VFX0YxIgpc4ymTprzQp50Jqe8Gp4h%2BSzuZiaAz9Q8UiqhuLOynmUUK3DRGaAOgBiHYRQCHgsvYfGueUlu82qxsvdmOS8YdfP9fDuE%2Bf7%2BB47zlZllfqc7NZpJGz3%2F%2Fc%2Fvvjv1%2Fz1%2BL1%2BfWbGGgTZWvx2MUjK%2Fe1HnK6XiaEd8K6DbfztCQvqyjmtVuGPCabl4uMndmsOE2zbEwzmlfXIlIdTF6UOf1NGjXIQwFKqluoJkDykuzO3rx9ida69%2F9M6IKU%2BZ6di54RFogQlIBInG9PAKtBM29A68iJSGB6duz6QzphbYVarqtFeFdadJGeWkTva5FZshUvTjOyG3Eby8Yly0QUH%2BMsKoo0biuzrfmOahMrJgSqVOt6ru2To2pJIlnr6ym2oThXobhalpMsKtNNex4qZX5kKqcJ%2FaApu6EjzJwaLgJmCFkPjtsetKDrPCbiwg%2BA6J2hXSgN3R63jPIZKT87roDwUQF9A9%2BRgP88BhMfhCMQPvHCCAMcSmRgpqZsQz3K0tmS84AhkzAch9wgpSykGImKRZok%2FPIwJ0X6J3qruuK0WPFHWT1cNwTuI%2B9rXdLiEBTZEj%2BWdEk6ZBKiWxpC5wJD6Cv41EXTwOygK9vBiQcCD4QWBwMLYwOGCgeEIRihb2DigpED8CMvYAxCr0LMBAQ%2BvyxEIGAdehmHylvOSrOymuRBkqSbo4hdzxDHuj8MwkB3hN6hCj9VE2EFWA1mg2Bcd8QeRrMvg9UuVjvW1MYyVm1bAVZn2GD1JLC%2BRNOGRzAgaMbfbhsEjoMlEGAFBgZusPy7Cr89TV%2BicA%2Fh9xTHJI5Vqn3DruNadxx%2Bu14HZvhm4bfnS0PrHH4HBvhDBj6CwYOLgtPh9UICPg0rsE4H0pkTta8ypBgoKfrzBkhvb2ArUgIXvRmb9ZqzlDoX0igiZ9tScG7g7z%2F2feUfsKb5B9skIAbl8%2FzOkln1BuQ0AsFOBPZF%2Fg9DaRpa%2Bz%2BTjficWfT1zEbYqnQEQ4DF1%2F9V6QgPjFidzxuNJlXOwuMpiPAQPbEqk6AYIny9wG3BV5mgcBT4HXiCwpYzFF%2Fv1c2b7Hl32n0J8HtZ3gm6a5w%2BX97R2rFfkKYxROiPCAjiBw82iOD0QgQ%2BDRtrTQST6Ro2EYbhEZD%2BHkGR%2BTJLnddZI%2BtGOfAEpr98tRNaxnwOyXzC%2FjYKIHmjwIPVPDqWWy%2FzCRWZIkOE4RCh2jhwmyC6S4TuZgFbax5ckP4yPOiRB5VDOAvGW1HivnyDIpdoQuurhNZSvKPJLgIoJ97MVvqzKPD03EoPFdm2L%2FelZg%2FCWS8mfQR5u5cr6SNIvfcdwD7ydAb5FyP%2FhssKXeRrvuMG9pGYM8g%2FC7%2FuvrPqw%2Ff%2B951p%2FhE87CMrZ1hwOQuGsfvyr4uCqrbv%2FJxSPYvTD1mhyf8%3D%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22j2wgQkeAnVDDI_-STZWu%22%20name%3D%22%E7%AC%AC%2010%20%E9%A1%B5%22%3E7VxRb6M4EP41fmwFNhjzGJJ09%2BFOulOl62rfKDgJWgIRIU3aX382MQnYRE263UIcoyp1BmMb5vtmxmMTgMbL3bciXC3%2BzmOaAmjFO4AmAELbQQ77xyWve4nnC8G8SGJR6Sh4TN6oEFpCuklium5VLPM8LZNVWxjlWUajsiULiyLftqvN8rTd6yqcU0XwGIWpKn1K4nIhpDb2jye%2B02S%2BEF0T6O1PLMO6sriT9SKM821DhKYAYgDRLgQoAFzW%2FkPjIs%2FLd6vVlZe7MU35w6%2Bf677fh483cLj3gmblJ7X511O2ufvx74ISZ%2FXz7Qn%2Fdxe%2B3omOXsJ0Ix67eGTla62HIt9kMeWNsGaD7SIp6eMqjPjZLUMeky3KZcq%2B2aw4S9J0nKd5UV2LaHUw%2Bbos8l%2B0cQZh5KO4uoVqALQo6e7kzdvnaE2%2B%2F280X9KyeGXfRcuICEQISkAkvm%2BPAKtBs2hA68CJUGB6fmj6Ip2wukItn6tFeFNadJGeWkTva5FZshUvzlK6G3Eby%2FqlWSyKkygN1%2BskaiuzrXlJtbEVUQq7VOti1%2FboQbU0Vqz15ym2oTi3Q3G1rKBpWCYv7XF0KfOSoRwH9E%2BesBs6wMyp4SJghpB177jtTtf5poiouPACEL3TtQuVrtv9lmExp%2BVH%2BxUQPiigb%2BA7KvCnLiAE%2BBNeGHmABGCKwcgCxANTAkZTEFgKOZjpKdvQD9NknnFeMKRShuuAG6iEhRgjcWKZxDG%2FPCjoOnkLn6umOE1W%2FNFWD9sNgDvhbW3KfL0PkmyFL1meUYlcQvSVhtGRDCOyVMPodfBLRtfA7CJW4PEYzhqkMxhohjhuGwOOQxQMkOvDgHdTEQ7WNE4lPUQ4MxLRKOpS7TNxHde64QjHxRLMyJdFONhTutY5wvEN8IcMfAT9exf5xwP3QgI%2BDMu3jgfSmRN2R%2B6JRfvBCPgOmHr8c0R4gX3y%2BL86RR74RMBnhf0cwQb%2B2ASBykTAdtvWtQKWEkLY9fzgigJB%2B7ZyXUTTXJdtkl2D8oielOyqQkGn4RElV%2FSHPCKByjC0doEdmS%2BIU%2B684uSFFee8%2BFGvuG%2BIjb3ZVlfzPk%2BrkUnVBuaZtY5c2%2F6y50JuSG7euOK2Afd%2BwxU7A7fhamLOzGp6tOFEns57vcxqfHlq7x0Rr6kZPyM7aYjQHxEQJPcYNojg9EIEPgybaE2EPhK82Ap9xsAOIsCJhy1DhAYCh%2BERkP4eoSPhe1YU7%2FFC8HA8ZQJqOSMiRzn65LagZeKIIZlP2N%2F6GFLXx%2B6t5iFZbr3MJ%2BxYGjBEGA4RqvWyrwmiZSLIa2S21jw4Y7HD8KBHHlQO4SQYv4oSt%2BUbOlaOTGj9KaG1Eu90LDZeZVytLrOYHaQnUYD13EEK%2B0jSmhXnk15MXnGuXq%2Fof8VZ81ctYB8ZWsOC81kwjH0XSO99F9CkZ%2F9U9ODKiStNYsh6eMZwDsNwKlu4%2BzGcyhZuvQ0nOrFn2wcBrnaePQDfNq9qXm4mD6%2FtXfermqgjYdmJj4B5T7dytQwo2OBDWeXUFB9q8s5kYk4bCasNAk0yMcik4y6xBNcCgqruO7%2BbVMczx1%2BsQtP%2FAQ%3D%3D%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22bBCH8Dlit9WQ7ip_dov_%22%20name%3D%22%E7%AC%AC%2011%20%E9%A1%B5%22%3E7Zxfb5swFMU%2FDY%2BTAuZPeEzSrN2kqqryUGlvLnaCNcARMU3STz%2BTmDXxZWq3RS1cKlVquDgm%2BOcDhxOIQ2b57rqk6%2FRWMp453ojtHHLleJ7rE1%2F%2Fqyv7YyWKTWFVCmYavRQW4pmb4shUK8H45qyhkjJTYn1eTGRR8ESd1WhZyu15s6XMzre6pisOCouEZrD6IJhKTdUN45cVN1ysUrPpsRcdV%2BS0aWz2ZJNSJrcnJTJ3vNDxyI46ZOrUtfM%2FMiulVK82axrnuxnP6sFvxvW43a%2F%2F3sHvfS95oS7Up9hPppPk7tvk7sf8dv7w%2FZ5W91%2FMhp5oVplhn5sxU%2FsGRCmrgvG6F93vdJsKxRdrmtRrt3rq6Vqq8kwvufrlUmTZTGayPLyXLJdLL0l0faNK%2BZOfrGHhYxiEh304fAJeKr774967b8FmD8A1lzlX5V4vm569sZkSRhNeZJa3LzMsNqX0ZG75pkbNnF797vmvmOi2BstlKXqQIuMFAKkHWJ3ToplYFfp1ogeaazDTGoPQGpyYFblgrH77tOQb8UwfD13V02AtRaEOoxFMneCq7qtScnM8irgAeCELbs0OU3pP%2FCS28QcAf9CCn3QbPwH4FxcVMXdZwKM2EcdhROhHi5g06uy3iH1IsSqfxJMe608h20IGUwAKOWqZAh0XcgCmwN1lz8aUxSxoEzLlvku8Dxay7%2FoYhBxCitr6fmoYnIwDi34M6Pst9Duu4QjQv7mohh9dxpajNg27o4jE700RaLgRbL81PIYUq1wWK1ltPpUMlBzZcwCejdvmQMeVHIM58H9Cfk8kPrjQhUj8tkudrguzSaeGkli8BWQPj68uDJ76I64gwskExkj9YRKGOJkMLNuJApwYYbiD%2Bsp%2B7OPECAOa%2FhwhbSdBXBxMYNyC2hDa5gMLRpiboD5C2n4FC0YYnPTnCGmbDyxM%2Bhxk2E4CCRNv1GMmwEkEOJhgyiSwMIGZxLBsARKMMMZAbdKBk0CCseUelYti7FgaBcwHEowwxkCNEfiVN34%2F2XWMMPnosV9BwgTGGP1hAswHEiYwkxiW%2BUCCEcYYqM9awHzgwNjc9NPLI6TtJHyCgwlMPlBfZdvmAwtGGJagPtHZfgULRhiWoFaj7VewYBz4PR9YMA7soRxgcXDcukNgWIL6uQxgcZBgHNjjNcDiIMHY8nwNZozA4iDBCCMZ1BiBxcGBsfl4Q7lu7M2vgBzavvJTNKa%2Fkx8BIvNf%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22CXSuBJb4wltGAMlzAvSj%22%20name%3D%22%E7%AC%AC%2012%20%E9%A1%B5%22%3E7Vxtk6o2FP41%2Bbg7QHgJH0Hx9s7ctndmp9OXbyhRaZFYYFftr29OSFAEXbbrqgt1dxROXkmePOckOQHh0Wr7JQvXyx9ZRBNkaNEW4TEyDN3EJv8Bya6UOK4ULLI4kpH2gqf4HyqFmpQ%2BxxHNaxELxpIiXteFM5amdFbUZGGWsU092pwl9VLX4YI2BE%2BzMGlKf42jYimluu3uA36g8WIpiyaGUwasQhVZPkm%2BDCO2ORDhABk2MvA2RNhHIKv%2F41HGWPFqNBV5tR3RBBpftWtZ7uS%2FZ1A9e0bT4kJ5LheLeDf7%2BgtZ0j9GHtloy2%2FJA2QlmqjYqXanEe8GecuyYskWLA2TYC%2F1M%2FacRhSy5QX5%2BzjfGFtzoc6Ff9Ki2ElMhc8F46JlsUpkKH%2BobPcbpH%2B01O3vMjtxM97W7nbyrqwrVPBkM0lRzp6zGT334BLRYbagxZl4Zhe8HLf8F8pWlFec32c0CYv4pV7hUA6NRRXvTV3L48revTAYytq9hMmzrO%2FXn0cosJAXIN%2BFC9dFHkGBi4iGXA8FBPkTRBwhsRAZo8BB%2FhjiBzZybRFkIt9Hvg2RvQlc83zIhIf6NEwhAc%2BImLIYyNSEwogrLibI0yEvokPiY6jugQio2izjgj6tQ9HvG06KddDN4yQZsYRlIi2OLEoik8vzImN%2F0YMQYkyxbVdwe6FZQbfnAfcOgKicFVlJtsaOZOvNnvuwKeMsD2jP0e4bU9ZACQZ3JBhjQASDGwQjSEWDsQ2s4HF2eVpncbpoZx3OBSDhlOFD6CXpYD6fG7NZGx1E9tS2bk0HhtkPOjCbCDDshNfdj%2BIXfrmAS1AMk3BWsGz3neXF94zNaJ7z%2FqiUhUzDa3mQrCWn9T75QaZSOQGU%2BDdGriXgxpWTOxU6qYMqgjim0FsOAJjYp%2Bp0SZUVUjJvxag9I3Q6vzFGLa0fGDVIP1XWq6rIvpYqeksZ%2B5K%2Bs5g%2FUQU%2Fwz2Cn4MfrXqZpZKW6d6ArRrCqge8OS7d2%2BKyhso9SD%2FelLI74tcZkCllt5hSzWmZmGnBtMxCvnYwywqERgsQKWdjI1CHSgWK5LpQdvx2BKGgLwORXBThaSKVmOpBkMgcpncG8nyRnJeFhWY0wXK7qJ3mzh1I2tSB2MYujm6sA22l7z65DsTaPelA%2FXpc43TkGjIgrnFauIaI6VlwsOBjAWu4YuUHOKJkHw0YpMfj31Jju2%2FjX2%2F02jDGP%2Bk4%2Ft0BjX%2FSOv7rSh6m1z%2BFK%2BpteKNXE%2FWcFiqgZdJ9SV6g4nO3vNCXuTE2BsoLbkdeKHdPB0IMbkdikOturdxwek1uQPSA1bD%2F7PSAB0oPymnidX54L4I%2BEz%2BoVjlLEN56ncQz%2FkwsHbGUD76iwRPNKMOmC6MvswzztnRxsxVNveuSvD6k7WHVKud3B9tNjEtuFM5ZRr%2BmcRGHSfyPYJ02uvnw7b65BX8g55x3SEHi00ZOtvjcmJx0xfqfnZyG6rmiG13JCQ%2BJnIxu5FRtsDiIBGJjxEQ%2B5yK7YpQ4XZSub8c8Fs4LmnEWWvNxG9P8ibaZOdWmTFdqE1WyETHkNo5buvRhUTcuIVBPVcmYV%2FKBN%2FuSRdL7wZ2Ii5HaWDra2vl4p4f78tNz7X6ynd7im%2FUmeLco4a5oOaeNPRgTcuj8r43fjs%2B%2BTBWMu1pZuKY2NjtqY2NIUwWjxZGwxWXUArd0zhAB12MO8satGPoWTmlS73euphcpv57x7qJ8OPsweONZmHgyYBVHUQkxmnNWmor8NEFdcVqINrN8ZI3PjX55cEYmRtVxlUOUnBkL7%2BeKB%2B1R19Wk60rOWypHNp%2FntA9eWXqbS%2Bsl9c59OSYf65fOK9c6uW8Fozc3M3Lpiu4I8xcLghmDwQxmhw5uUA064TbKOqefvpOPXCtNrdnJlefTYSffeR%2BrKr9u5BIHXLqlk7cj%2Fed4nwMWfOR5b19hKj3LhbHsmTIf120xkrmENyPpatP2BHK6bvUTc%2FpNlpEuaYB2PcmkD8knRm9zihNHIGGNRjnX9sLcLBH8%2FiGuPRpXNTXV4zv1AvpjeQ717HZnRiohPhRGanPTEwaMPMnWI0Z670mlipE04jq3ICXlOtU7UjKae7i%2BPFP5uk1dnTcR51a8iXx5gGcdnC6xwIJ2zQN72YFvooJImWoMR2BOnkARLiQfBnggzbzkT71hYKcspUfWuBRd1dzW1GCrHFS1hrldDchDc1udDLlTFlSrLx32MZp7YrWdjXGcr1kOHV0CuALn8YwtovmpU8Ufulcnyz27XXfySNbQDisfr1v15qCGM1AjEHc9FTokJwXVKEc2IJCQOLPpOW02YI%2BWp4%2FPY%2FZlex63GPeSw2E%2Futaf9t%2FPTAU8lHaIxyPoZL0ttY4MP9ZDUyVQr2CxhamlCQtLg%2FdegMQSF8rm2uuRaSO77FjCY5WVPaFuBm%2BV2crnTL2yr0VJVeukh%2Bg1r41eEfeVl%2BSpqcn%2B9YQ4%2BBc%3D%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22STG2XfgGbPdQsMTAQRJ7%22%20name%3D%22%E7%AC%AC%2013%20%E9%A1%B5%22%3E7Vtbl6I4EP41edw%2B3IVHUHpm9nZ6T%2B9tHlGiZhcJG%2BKtf%2F1WMCgIKDq2Yyvn9JkmRVFJVer7KpdppPdnq08sSKa%2F0BBHSFPCFdIHSNNUq2fALyFZbyQ9RwomjIRSaSd4JW9YChUpnZMQpyVFTmnESVIWjmgc4xEvyQLG6LKsNqZRudckmOCK4HUURFXpXyTkUylVLWf34jMmk6ns2tZ6mxezIFeWnqTTIKTLgkj3kWYhTV8FSPeQkJV%2F9D6jlB9Vy5Vnqz6ORPDzuG76fT7fwNZ3hmN%2BIZs%2F%2Ffjb29z874vzxyxOhvafv79pgx9sGSG%2BzsOOQ5gF2aSMT%2BmExkHk76Qeo%2FM4xMIq9OPtdH6mNAGhCsJ%2FMOdrmVLBnFMQTfkskm%2FBJ7b%2BW3z%2FZObNr9Jc1hisSq21bFWDIuOU0jkb4QNu5vkbsAnmB%2FS0jZ6IQaGDdiHfBf4TpjMMA4c2w1HAyaKc0oFExmSrd9LMgq6c3MvmghzdIojmcrxDHMTIN5HXQ64pHmwf2Zp4cBTx7PeQN0CuLySugWxDSMQrK9NxkGt7YOI5GHHK1i805S%2BMjnCaUgYDj2AmvKF4mvBs%2FFYwgwTy4mGaSH98HdmKsCj6tpEzyHrqIdvLJH3kWLmO2sbisbbiDlPOYLhukkRkBFNH4z6NOV5xCDPDY4bTKTyReEH%2FxU2%2BpVnga0aTSUKyOORy43cw7eVPK9byaCW7wRSGiHwL2Y6Inm8jVxXR24ZuP4aVvr5jHPf4acc%2BgkqWU8LxaxJk6F9CISwzTSNjLDCDwVwG49LMttzk9VY2l7viZeS1dVqoW6qi3DQtOI9RIrSWJUJ%2F5BKhNZaIkwrC96gEx7n3W9ttSY%2FhCUk5ZpVIpBeuB6d70Jb%2FlfpaM6YMf4kJJ0FE3jL%2Fs2nXYH4Keu4YnN9Xa65NFyjrl5q5MYlJOi2Uqz0vPmyt2rY%2FerHKx3zv1UpvWa2MR65WemO1cp%2BR5wiu8VRBNze5F%2BlI6whp6feywlbVyiTcJWkZLUnLfGTSMlqSlgD0r8EMu0uYidMYLMU8%2F7pjrGsylnk3yyztMRjLbMlY1iMzlnkCY0lAn09a28PMjreux1vW3ay09MfgLaslb%2FUembeslrxVRf159FXDHh2LXZHF7HtZffVaJu524kg8EfN5WsYG4pj2hdEEZobg9BV36XrVdHXupuhWt7Q1txXqE%2FId5FrZMZqJ7OyQrXIt8J7%2FI8EH8PSzq4cDB3zV64y9K3ZQEhCEf3XkmDUXG%2B2v8x1k68Id0WkfRn4AEcJvFXnwkYE86GmQA6RmRFIji4wLITp2CV810eDCHtKygZXgBKicxPA8AjhhBgIBI%2FAkcuWLGQnDzZoLpwDgYWZKLIUSSmKepbfpIXMgbMEyK92suIRpiAw40acRTKQ%2BiGksrIxJFO2Jrono7bJ5vQfUAqJNuwbRxo0Durrjq8lf7UlkGCDQswr4bAL0N9wfn43buuvKrMLZ6pHryvYYbkEI74zzYwWyg%2FeF4K2ZVXhb1geEd3VjpD813JzlNeQY9kRaH17TVTJ7a%2FuEUnZGrndZvZfVVjmrDcWsZrVSk9X6jWd1dddUQ9hGQ6KXb1vydCtdpLRh%2BvdHQvvKdD5kuvJwDpDMmvLwIVd%2FdhsgmQeAVLoE2MPSKTupDk4PDKdezWaqti7dOpycNnCyGuDUdDZdQFUdJDpwdeA6BC77TrYymtIGXL0GcFXOz%2FM8rDsa7yDVQeoQpFSl7vTPuQVMZbpH%2FuJV2iv8rbHu%2Fw8%3D%3C%2Fdiagram%3E%3Cdiagram%20id%3D%22C1lZVwBWBivODLPyhwKg%22%20name%3D%22%E7%AC%AC%2014%20%E9%A1%B5%22%3E7V1dc6M2FP01ftwMIBDwmK%2FtTic7k26m3fQRG9mmxcjFZGPvr68wko0kYzAB8bF%2BSpBBFvcen3t0rxATcL%2Fa%2FhZ76%2BVX7KNwYmj%2BdgIeJoahOzYkf9KWXdbianbWsIgDn550bHgJfiLaqNHWt8BHG%2B7EBOMwCdZ84wxHEZolXJsXx%2FidP22OQ%2F5b194CSQ0vMy%2BUW78HfrKkrTp0jx98QcFiSb%2FaMej9rTx2Mr2TzdLz8XuuCTxOwH2McZL9t9reozA1HrNLdt3ngk8PA4tRlFS54HdX%2F3Lr%2FOftoj%2FW0%2Bnz9200%2FesT7eWHF77RG74Pvc3mmQz%2BdRXertdhMPOSAEf3OErQNqG3kuyYfWL8Fvko%2FQptAu7el0GCXtbeLP30nSCCtC2TVUiOdPLvPAjDexzieH8tmM%2FnxmxG2jdJjP9FuU98OIUWJJ%2FQ4aGYfHnhfesHaxIYIrxCSbwjp2wZ4rIrKAAtevh%2B9ObBRcucIwFt8yiAFoeOjzYm%2F1AzX2ByQzL57ZQYwJslozA3gFa%2F7A0kew%2FQqrqAYt05YdYTVnXbsqpZblUU%2BbcpA5OjCEek8c73Nsu9mXXepGk7oZwExdG%2BxdDAwaCMdYlx7ng%2FEdPFu9f04MZih3%2FTHvcHD9v8mQ87epQNFPkS8QvOIDeD3%2BIZKsdW4sULlJTRrOzcnPOsE85jbTEKCSn84Id7yqP0G55xQG7kgB0IeOwAUwBFdpv0qnwEETty%2BI4kdGV2kDraA%2Bxw2%2FUxZ40fc11hxNB419qia6tiRHfdGz4AGLZalOi2jApi9xd6iONkiRc48sLHY6vg5eM5TxivqXv%2FQUmyowLVe0swD6ccMPQ8MLQbCO0ScOyPnlEckFtH8cUsVc4%2BxmlofRAzZhkdFGCmMUc7Eh%2FEaB6jzfIOedFnIqgwDXQiFp68KZmmcP7zwmCREsGMWDf1wV0arokYC2%2FpB6vA9zOooE3w05vu%2B0sdtU7vb3%2FH1t3EejgX7%2BkkhV48OUTsvFPPYLpQHXzSbjTD5n92TNrXdTI7Bc%2FnG9SK%2F%2BAYhJkpyN2qwkwXg3Bjysy%2BRsm2oqRpmzcF7r40TspdiT21HCZl8rzCpDGYNCSmZJAAQy1K3ItQMktzR8GMx4bg822QvDIfk%2F8zjWRY9PDo8fRgJwNF45BCxJbVsrpqbA4Iu4TkaOaALC8siz4ZmENUeu5ZtZEKPcdyeQ80AhAd8Fe0J%2Ft0OefMEqDfMk%2BmVhtFLhSa%2FI%2Bl81yobpTzef%2FNagtmPdirq2SoXiHH3FcxxQIyvYyF5LPxuMHoWZSbUBMWbVPMVtUW9HJXigW9%2Fguk5DvDidWQopdRolrR67KkZ%2BF3NBVfvWdh15BF6wDNqmt6z%2BKuIUvJwVBex3E3twSlAz4lUGos8J7oS3HkZagbIgz7Hnl1zWgo9J7AierYa1w2T6iSTivOjEHb6bju2C3H2LBeefIUcISeHKgWNrKyD7Hnp1XOBzQPoiCVaxsZSUPMf2U%2FkbMJMGBBzh39r3Qa8soVprl5J35Dnk98MkBtqDt909yjKC%2Frhphv71xzD7i%2B3LXm7rQERKDUnOaW%2B1Ktua%2F16xaR4jaluWWcKNfcjZewe%2B8%2BDTSlfKXoo7jay27kl1C%2B5aXf4SlfIGfoXlfhWESvafVM9IIKmagB2NWy6onew1ODzRv2WuGtq3ozTHYWDC2rOdUr96VY9YJrjbdFpMCmVK%2BME1Ncb9c2UC57VmoMqhdoTaleKfyoVr1y6mq0qjcD6thU72XJidaXTetSccg0zDaLQ91xuLD0HsDaJGDrPINrwgrZAhIgTvV2udPoj6h4yLBgyIUjEy9gIzuCOBtDo5A25ZlFjBbBhmBjnLzknOWllJYADxDQCILZ4wSM6yy%2Bg%2FY4iwmUK2d1zVkfEC4CZwGgiLPYkCtzFhtZu5wlJ598%2FDRWJWUWrLbIKSnNEdil90rKlPMuxHHeWygUzh%2Fw7G1F7DPcXKItrHPqPJdoVsg1DMCujiGqpYq5xPa2zhnwPiYd5xIzTHYWqR2juVyi3JfiXKJZYYFMX2FYFVI9Qkr9bKLcF1S98dJl6%2BzHkE0URbnJSms13FfSU9vO%2B8Vm7tZ5QZDqYBc6jaDE4S9oTwZbly26u07OmyNyU%2Fz11qZxk5%2Bcm3ZLk3O3YMjFW7aJF9gKJueWnCP38bdRE1P5Jl7Dm6CzzSiuzNQ5M9UXmAIzWW2lDSWiKUsbihdYKtKGrGSUgzTx%2BgaNk5TKVx0Oj5Rg4%2FOVKynVI6XDUoqPk5KriJTYkKuTkquClORZ3J6UaDb8MURp%2BnscnATLZ3AD5KTmn%2F29clItToLiKuHanAQtRZzEhlyZk9jI2uUkuUK0jvEMbTa8VBoJK5U%2FmTxAVpJrUacezvgzCUJZ8A6g%2Buf27e0vcBSPJRuaaNeq21639oQGvD6XfNKHFaqqsNPnkgmWGquqnuhLcVUVXp9LVomU2lXVE32prqra7RV1qLY%2FTApc0zk%2FKyAHoq7PoUh4o4kDW50oVF4HUmXT7Y6pTVzUVXfbbUMT69GqwXrqZSunijUyhIco9u3yWo0JPlhEbl%2Fd23JxhuaLnojnUquce1POAGSoAXsm75naGLi8B6JdO5f3zmUp%2FV7pqo7lvVOwMFxRDASwOXkv96X6rTnGcGFYFVI9Qkp9eS%2F3pVreO4oS%2Fo4N6mv7T%2FK%2BobS%2FDtU9y5GVqvuOmU0X9gWF4psuL0Crfr6ntrEqZ%2FLHrO6d8lT%2BANS90%2FgeD9eKYqUfvunwkeXw8txLf%2Femw%2B9sYJjt1BOtggEXjUs631RQTXTkysiIn9Z0yve96FM1kRzGGCf508lUdfkV%2B6nZH%2F8H%3C%2Fdiagram%3E%3C%2Fmxfile%3E#%7B%22pageId%22%3A%22C1lZVwBWBivODLPyhwKg%22%7D

OK,那么整一个的Spring的BeanDefinition的创建解析就已经全部完成啦,看到最后,给个赞吧,哈哈哈!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/644072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux问题】删除用户时错把rm当成userdel删除后,该如何解决彻底删除?

问题引入:之前创建的用户默认在home目录中,过了段时间以为是一个目录就直接使用rm删除了,结果在创建一个和之前用户同名的用户时发现报错:useradd: user ‘cjs’ already exists(该用户已存在)。 1、问题 …

chatgpt赋能python:Python怎么找出最大数的位置?

Python怎么找出最大数的位置? Python是一种高级编程语言,它的简单易学和适用范围广泛使其成为了很多开发者的首选语言。在Python中,有许多方便的内置函数可以帮助我们轻松地处理各种任务。其中之一是查找最大值,但是我们如何找出…

【Linux后端服务器开发】shell脚本

目录 一、变量 1. 普通变量 2. 环境变量 3. 位置变量 4. 特殊变量 二、输入输出 1. read命令接收输入 2. echo命令输出字符串 三、表达式 1. 算术表达式 2. 逻辑表达式 四、分支控制 1. if 分支 2. case 分支 五、循环控制 1. for 循环 2. while 循环 3. unt…

redis键值对映射关系存储-Dict

基本概述 Redis是一个键值型(Key-Value Pair)的数据库,可以根据键实现快速的增删改查。而键与值的映射关系正是通过Dict来实现的。 Dict由三部分组成,分别是:哈希表(DictHashTable)、哈希节点&a…

基于51单片机设计的电动车控制器

一、项目介绍 随着社会经济的快速发展,人们对节能环保的要求越来越高,电动车因其无污染、噪音小、使用成本低等优点逐渐成为了市场关注的焦点。同时,随着科技的不断进步和应用,电动车的技术水平也在不断提高。 为了更好地满足市场需求和科技进步的要求,本项目基于51单片…

车载以太网 - 数据链路层 - VLAN

数据链路层通信 以太网二层数据链路层的寻址方式、帧结构、及 VLAN (Virtual LocalArea Network),其分为LLC(Logical Link Control)逻辑链路控制子层,和 MAC(Media Access Control)媒体访问控制子层,其中,MAC 子层负责以太网的总…

chatgpt赋能python:Python中的异常处理

Python中的异常处理 在Python编程中,异常是指程序出现了不正常的情况,比如语法错误、运行时错误等等。这些异常会导致程序崩溃,所以我们需要在程序中使用异常处理来避免这种情况的发生。 什么是异常处理? 异常处理是一种技术&a…

chatgpt赋能python:Python如何把多行合并成一行

Python如何把多行合并成一行 如果你常常需要处理文本数据,你就会遇到将多行文本合并成一行的需求。在Python中,这个任务非常简单,本文将介绍如何使用Python实现把多行合并成一行。 什么是多行文本? 在编程和文本处理中&#xf…

【MySQL高级篇笔记-其他数据库日志(下) 】

此笔记为尚硅谷MySQL高级篇部分内容 目录 一、MySQL支持的日志 1、日志类型 2、日志的弊端 二、慢查询日志(slow query log) 三、通用查询日志(general query log) 1、问题场景 2、查看当前状态 3、启动日志 方式 1 :永久性方式 方式2:临时性…

回归预测 | MATLAB实现基于LSTM-AdaBoost长短期记忆网络结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于LSTM-AdaBoost长短期记忆网络结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于LSTM-AdaBoost长短期记忆网络结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于LSTM-Ad…

chatgpt赋能python:Python如何将多个图像合并输出?

Python如何将多个图像合并输出? 如果您需要将多个图像合并为一个,并将其输出到一个文件中,则Python提供了一些简单的解决方案。在本文中,我们将介绍如何使用Python进行该操作,并附上示例和用法说明。 PIL库 Python …

计算机图形学与opengl C++版 学习笔记 第11章 参数曲面

目录 11.1 二次贝塞尔曲线(三点)11.2 三次贝塞尔曲线(四点)11.3 二次贝塞尔曲面(3x3控制点)11.4 三次贝塞尔曲面(4x4控制点)补充说明 在20世纪50年代和60年代在雷诺公司工作期间,皮埃尔贝塞尔(Pierre Bzier)开发了用于设计汽车车身的软件系统…

【信息与内容安全复习】第二章知识要点总结

1.网络媒体信息的获取流程 2.三原色原理 3.颜色特征表达的特点、问题和主要方法 4.文本特征表达的方式 5.网络媒体信息与网络通讯信息 6.网络媒体信息获取方法 7.补充 8.视觉特征表达的应用 9.颜色特征表达举例之颜色直方图 10.纹理特征和局部特征 答: 1.网络媒体…

Redis从入门到精通【高阶篇】之底层数据结构字典(Dictionary)详解

文章目录 0.前言1. 字典的结构2. 源码解析2.1. 字典的结构体2.2. 字典的函数接口dictAdddictFinddictResize 3. 字典/哈希表的优缺点3.1 优点3.1.1. 快速的查找时间3.1.2. 动态调整大小3.1.3. 灵活的数据类型3.2 缺点 4.总结5. Redis从入门到精通系列文章 0.前言 上个篇章回顾…

java三大特性之【多态】

多态 1.1 概念1.2 实现条件1.3 方法重写(override)与方法重载(overload)1.4 向上转型1.5 向下转型 1.1 概念 同样的一个方法/行为,经过不同的对象,表现出不同的行为,这样的现象就称为多态。 举…

今天就详细告诉你发票识别软件能识别哪些内容

既然大家点进这篇文章,说明大家对增值税发票识别技术非常感兴趣。本文会先介绍增值税发票识别技术的相关知识,然后再具体介绍识别增值税发票的软件有哪些。 增值税发票识别技术是一种基于图像识别和深度学习算法的自动化技术,它可以快速准确…

AI问答:前端需要掌握的设计模式/vue项目使用了哪些设计模式/vue项目开发可以使用哪些设计模式

一、理解什么是设计模式 设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。 设计模式是一个在软件设计领域中被广泛应用的概念,它指的是一套被公认为有效的解决特定问题的设计思路和方法。 设计模式更多的是指导思想和方法论,而不是现…

零基础学 MySQL(基础版)

零基础学 MySQL(基础版) 1. 引出 思考一个问题: 淘宝网,京东、微信,抖音 都有各自的功能,那么当我们退出系统的时候,下次再访问时,为什么信息还存在? 2. 解决之道 2.1 解决之道—文件、数据库 为了解决上述问题&…

chatgpt赋能python:Introduction

Introduction 在机器学习中,模型的训练是非常重要的步骤之一。模型训练意味着为数据拟合合适的参数,以便能够准确地预测未来的值。Python是一种功能强大的编程语言,提供许多库和框架来训练机器学习模型。在本文中,我们将探讨如何…

FFmpeg编程入门

标题 播放器框架常用音视频术语解复用器和编解码器FFmpeg库简介FFmpeg有8个常用库: FFmpeg函数简介封装格式相关编解码器相关 FFmpeg数据结构简介关系数据结构分析 播放器框架 流程:媒体文件通过复用器将音频流,视频流,字幕流分离…