{"id":762,"date":"2023-05-28T02:11:03","date_gmt":"2023-05-27T18:11:03","guid":{"rendered":"https:\/\/xinchewhd.com.cn\/?p=762"},"modified":"2023-05-28T02:11:03","modified_gmt":"2023-05-27T18:11:03","slug":"spring%e6%ba%90%e7%a0%81%ef%bc%9abean%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f%ef%bc%88%e5%9b%9b%ef%bc%89","status":"publish","type":"post","link":"https:\/\/xinchewhd.com.cn\/index.php\/spring-boot\/spring%e6%ba%90%e7%a0%81%ef%bc%9abean%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f%ef%bc%88%e5%9b%9b%ef%bc%89\/","title":{"rendered":"Spring\u6e90\u7801\uff1aBean\u751f\u547d\u5468\u671f\uff08\u56db\uff09"},"content":{"rendered":"<div class='wxsyncmain'>\n<p style=\"text-align: center;\"><img decoding=\"async\" class=\"rich_pages wxw-img lazyload\" data-galleryid=\"\" data-ratio=\"0.2777777777777778\"  data-type=\"gif\" data-w=\"1080\" style=\"\" data-src=\"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020005385.gif\" src=\"https:\/\/s.nmxc.ltd\/sakurairo_vision\/@2.6\/load_svg\/inload.svg\" onerror=\"imgError(this)\"  \/><noscript><img decoding=\"async\" class=\"rich_pages wxw-img\" data-galleryid=\"\" data-ratio=\"0.2777777777777778\"  data-type=\"gif\" data-w=\"1080\" style=\"\" src=\"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020005385.gif\"  \/><\/noscript><\/p>\n<section label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\">\n<section label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\">\n<section label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin-top: 10px;margin-bottom: 10px;\">\n<section label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"text-align: center;\">\n<section label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"display: inline-block;vertical-align: top;padding: 8px 5px 5px 3px;width: 50%;border-right: 1px solid rgb(166, 189, 231);\">\n<section>\n<section label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin-top: 0.5em;margin-bottom: 0.5em;\">\n<section style=\"width: 4em;height: 4em;display: inline-block;vertical-align: bottom;border-radius: 100%;font-family: PingfangSC-LIGHT, sans-serif;background-image: url('https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020003826.jpeg');background-size: cover;background-position: 50% 50%;background-repeat: no-repeat;\"><br  \/><\/section>\n<p><span style=\"font-size: 14px;color: #a6bde7;line-height: 1.6;font-family: PingfangSC-LIGHT,sans-serif;\">JAVA \u5f00\u53d1\u5fae\u6307\u5357<\/span><\/p>\n<\/section>\n<\/section>\n<\/section>\n<section label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"display: inline-block;vertical-align: top;padding: 6px;width: 50%;\">\n<section style=\"border-width: 1px;border-style: solid;border-color: rgb(166, 189, 231);padding: 8px 5px;width: 120px;color: rgb(166, 189, 231);margin: auto;line-height: 20px;font-size: 14px;border-radius: 4px;\">\n<p>\u8bfb\u5b8c\u9700\u8981<\/p>\n<section style=\"font-size: 30px;color:#666;line-height: 32px;\">34<\/section>\n<p>\u5206\u949f<\/p>\n<p style=\"font-size: 11px;color:#aaa;padding-top:3px;\">\u901f\u8bfb\u4ec5\u9700 12 \u5206\u949f<\/p>\n<\/section>\n<\/section>\n<\/section>\n<\/section>\n<\/section>\n<\/section>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(0, 0, 0);text-align: center;line-height: 1.5;\"><span style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;\"><span style=\"color: rgb(137, 137, 137);line-height: 1.5;\"><span style=\"color: rgb(62, 62, 62);font-family: PingfangSC-Ultralight, sans-serif;\"><strong style=\"color:rgb(32, 91, 195);\">\/ <\/strong>\u524d\u8a00<strong style=\"color:rgb(32, 91, 195);\"> \/<\/strong><\/span><\/span><\/span><\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u5728\u4e4b\u524d\u7684\u6587\u7ae0\u4e2d\uff0c\u6211\u4eec\u4ecb\u7ecd\u4e86 Bean \u7684\u6838\u5fc3\u6982\u5ff5\u3001Bean \u5b9a\u4e49\u7684\u89e3\u6790\u8fc7\u7a0b\u4ee5\u53ca Bean \u521b\u5efa\u7684\u51c6\u5907\u5de5\u4f5c\u3002\u5728\u4eca\u5929\u7684\u6587\u7ae0\u4e2d\uff0c\u6211\u4eec\u5c06\u6df1\u5165\u63a2\u8ba8 Bean \u7684\u521b\u5efa\u8fc7\u7a0b\uff0c\u5e76\u4e3b\u8981\u8bb2\u89e3 createBean \u65b9\u6cd5\u7684\u5b9e\u73b0\u3002\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u4e86\u89e3 Bean \u7684\u5b9e\u4f8b\u5316\u3001\u5c5e\u6027\u6ce8\u5165\u3001\u521d\u59cb\u5316\u548c\u9500\u6bc1\u7b49\u6b65\u9aa4\uff0c\u4ee5\u53ca\u5404\u4e2a\u6b65\u9aa4\u7684\u5177\u4f53\u5b9e\u73b0\u7ec6\u8282\u3002\u901a\u8fc7\u672c\u6587\u7684\u5b66\u4e60\uff0c\u8bfb\u8005\u5c06\u80fd\u591f\u66f4\u6df1\u5165\u5730\u7406\u89e3 Spring \u6846\u67b6\u4e2d Bean \u7684\u521b\u5efa\u8fc7\u7a0b\uff0c\u4ece\u800c\u4e3a\u540e\u7eed\u7684\u5b66\u4e60\u548c\u5b9e\u8df5\u6253\u4e0b\u575a\u5b9e\u7684\u57fa\u7840\u3002\u597d\u4e86\uff0c\u6211\u4eec\u5f00\u59cb\uff01<\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(0, 0, 0);text-align: center;line-height: 1.5;\"><span style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;\"><span style=\"color: rgb(137, 137, 137);line-height: 1.5;\"><span style=\"color: rgb(62, 62, 62);font-family: PingfangSC-Ultralight, sans-serif;\"><strong style=\"color:rgb(32, 91, 195);\">\/ <\/strong>createBean<strong style=\"color:rgb(32, 91, 195);\"> \/<\/strong><\/span><\/span><\/span><\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u524d\u9762\u6211\u4eec\u8bf4\u8fc7\uff0c\u6700\u5f00\u59cb\u7684 bean \u5b9a\u4e49\uff08\u5408\u5e76\u540e\u7684\uff09\uff0c\u89e3\u6790\u7c7b\u7684\u5143\u6570\u636e\u65f6\uff0c\u7528\u5230\u7684\u662f ASM \u6280\u672f\u5e76\u4e0d\u4f1a\u771f\u6b63\u5f00\u59cb\u89e3\u6790 class \u6587\u4ef6\uff0c\u6240\u4ee5\u4e5f\u53ea\u662f\u63d0\u53d6\u51fa\u6765 bean \u7684 name \u503c\u4f5c\u4e3a beanClass \u5c5e\u6027\uff0c\u77e5\u9053\u8fd9\u4e2a\u524d\u63d0\uff0c\u90a3\u4e48\u8fd9\u4e00\u6b65\u5c31\u597d\u8bf4\u4e86\uff0c\u4e0b\u9762\u662f\u4ed6\u7684\u6e90\u7801\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">  @Override<\/span><\/code><code><span class=\"code-snippet_outer\">  protected <span class=\"code-snippet__built_in\">Object<\/span> createBean(<span class=\"code-snippet__built_in\">String<\/span> beanName, RootBeanDefinition mbd, @Nullable <span class=\"code-snippet__built_in\">Object<\/span>[] args)<\/span><\/code><code><span class=\"code-snippet_outer\">      throws BeanCreationException {<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    RootBeanDefinition mbdToUse = mbd;<\/span><\/code><code><span class=\"code-snippet_outer\">    <\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ \u9a6c\u4e0a\u5c31\u8981\u5b9e\u4f8b\u5316Bean\u4e86\uff0c\u786e\u4fddbeanClass\u88ab\u52a0\u8f7d\u4e86<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    Class&lt;?&gt; resolvedClass = resolveBeanClass(mbd, beanName);<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (resolvedClass != <span class=\"code-snippet__literal\">null<\/span> &amp;&amp; !mbd.hasBeanClass() &amp;&amp; mbd.getBeanClassName() != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">      mbdToUse = <span class=\"code-snippet__keyword\">new<\/span> RootBeanDefinition(mbd);<\/span><\/code><code><span class=\"code-snippet_outer\">      mbdToUse.setBeanClass(resolvedClass);<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ Prepare method overrides.<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">      mbdToUse.prepareMethodOverrides();<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ \u5b9e\u4f8b\u5316\u524d<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__built_in\">Object<\/span> bean = resolveBeforeInstantiation(beanName, mbdToUse);<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (bean != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">return<\/span> bean;<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__built_in\">Object<\/span> beanInstance = doCreateBean(beanName, mbdToUse, args);<\/span><\/code><code><span class=\"code-snippet_outer\">      ......<\/span><\/code><code><span class=\"code-snippet_outer\">      return beanInstance;<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p><br  \/><\/p>\n<blockquote label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: normal;border-left-width: 5px;border-left-color: rgb(77, 124, 207);margin-left: 32px;margin-right: 30px;\">\n<ol label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" class=\"list-paddingleft-1\" style=\"width: 515.844px;color: rgb(77, 124, 207);line-height: 25.6px;font-family: PingfangSC-LIGHT, sans-serif;\">\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">resolveBeanClass:\u771f\u6b63\u7684\u5f00\u59cb\u52a0\u8f7d bean\u3002<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">mbdToUse.prepareMethodOverrides();\u548c@lookUp \u6ce8\u89e3\u6709\u5173\u7cfb\uff0c\u4e0d\u770b<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">resolveBeforeInstantiation\uff1a\u5b9e\u4f8b\u5316\u524d\u7684 BeanPostProcessors\uff0c\u5982\u679c\u521d\u59cb\u5316\u4e86\u90a3\u4e48\u5c31\u8fd4\u56de\u4e86\uff0c\u4e0d\u8d70\u5176\u4ed6\u521b\u5efa\u903b\u8f91\u4e86\u3002<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">doCreateBean\uff1a\u6b63\u5e38\u5f00\u59cb\u5b9e\u4f8b\u5316\u3001\u521d\u59cb\u5316 bean\u3002<\/span><\/p>\n<\/li>\n<\/ol>\n<\/blockquote>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><strong style=\"color: rgb(32, 91, 195);line-height: 25.6px;min-height: 1em;\"><em><span style=\"font-size: 24px;padding-left: 4px;font-family: PingFangSC-Semibold, sans-serif;\">1<\/span><\/em><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><br  \/><\/p>\n<h2 label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin-top: -10px;font-family: PingfangSC-LIGHT, sans-serif;line-height: 9px;color: white;border-radius: 10px;background-image: linear-gradient(to right, rgb(32, 91, 195) 20%, rgb(166, 189, 231) 10%);background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;\">&nbsp; &nbsp;<\/h2>\n<p style=\"margin: 20px;white-space: pre-wrap;color: rgb(137, 137, 137);line-height: 1.5;\"><strong style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;font-family: PingFangSC-Semibold, sans-serif;\"><jncounttag><\/jncounttag>resolveBeanClass<\/span><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u5982\u679c\u5f53\u524d bean \u88ab\u52a0\u8f7d\u4e86\uff0c\u90a3\u4e48\u76f4\u63a5\u8fd4\u56de\u4e86\uff0c\u5982\u679c\u6ca1\u52a0\u8f7d\u90a3\u4e48\u5f00\u59cb\u89e3\u6790\u5f53\u524d bean<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">  @Nullable<\/span><\/code><code><span class=\"code-snippet_outer\">  protected Class&lt;?&gt; resolveBeanClass(RootBeanDefinition mbd, <span class=\"code-snippet__built_in\">String<\/span> beanName, Class&lt;?&gt;... typesToMatch)<\/span><\/code><code><span class=\"code-snippet_outer\">      throws CannotLoadBeanClassException {<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ \u5982\u679cbeanClass\u88ab\u52a0\u8f7d\u4e86<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (mbd.hasBeanClass()) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">return<\/span> mbd.getBeanClass();<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ \u5982\u679cbeanClass\u6ca1\u6709\u88ab\u52a0\u8f7d<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (System.getSecurityManager() != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">return<\/span> AccessController.doPrivileged((PrivilegedExceptionAction&lt;Class&lt;?&gt;&gt;)<\/span><\/code><code><span class=\"code-snippet_outer\">            () -&gt; doResolveBeanClass(mbd, typesToMatch), getAccessControlContext());<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">else<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">return<\/span> doResolveBeanClass(mbd, typesToMatch);<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u662f\u5426\u5df2\u7ecf\u52a0\u8f7d\u7684\u5224\u65ad\u4f9d\u636e\u5c31\u662f\u6211\u8bf4\u7684\uff0c\u662f\u5426\u662f class\uff0c\u6b63\u5e38\u4e0b\u6211\u4eec\u7684 beanClass \u4e3a\u5b57\u7b26\u4e32\uff0c\u4e5f\u5c31\u662f beanname\uff0c\u770b\u4e0b\u6e90\u7801\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">public boolean hasBeanClass() {<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">return<\/span> (<span class=\"code-snippet__keyword\">this<\/span>.beanClass <span class=\"code-snippet__keyword\">instanceof<\/span> Class);<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p><br  \/><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><span style=\"margin-left: 10px;color: rgb(99, 141, 213);\"><strong><em><span style=\"font-size: 24px;padding-left: 4px;font-family: PingFangSC-Semibold, sans-serif;\">1.1<\/span><\/em><\/strong><\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><br  \/><\/p>\n<h3 label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin-top: -10px;line-height: 5px;background-image: linear-gradient(to right, rgb(99, 141, 213), rgb(133, 165, 222));background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;\">&nbsp; &nbsp;<\/h3>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(137, 137, 137);line-height: 1.5;\"><strong style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;\"><strong style=\"color: rgb(137, 137, 137);font-size: 18px;line-height: 1.5;white-space: normal;\"><span style=\"color: rgb(62, 62, 62);font-family: PingFangSC-Semibold, sans-serif;\">doResolveBeanClass<\/span><\/strong><\/span><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u771f\u6b63\u5f00\u59cb\u52a0\u8f7d class\uff0c\u5982\u679c\u9700\u8981\u52a0\u8f7d class \u90a3\u80af\u5b9a\u79bb\u4e0d\u5f00\u7c7b\u52a0\u8f7d\u5668\uff0c\u770b\u4e0b\u6e90\u7801\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">  @Nullable<\/span><\/code><code><span class=\"code-snippet_outer\">  private Class&lt;?&gt; doResolveBeanClass(RootBeanDefinition mbd, Class&lt;?&gt;... typesToMatch)<\/span><\/code><code><span class=\"code-snippet_outer\">      throws ClassNotFoundException {<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    ClassLoader beanClassLoader = getBeanClassLoader();<\/span><\/code><code><span class=\"code-snippet_outer\">    ClassLoader dynamicLoader = beanClassLoader;<\/span><\/code><code><span class=\"code-snippet_outer\">    boolean freshResolve = <span class=\"code-snippet__literal\">false<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (!ObjectUtils.isEmpty(typesToMatch)) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ When just doing type checks (i.e. not creating an actual instance yet),<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ use the specified temporary class loader (e.g. in a weaving scenario).<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      ClassLoader tempClassLoader = getTempClassLoader();<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (tempClassLoader != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">        dynamicLoader = tempClassLoader;<\/span><\/code><code><span class=\"code-snippet_outer\">        freshResolve = <span class=\"code-snippet__literal\">true<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">if<\/span> (tempClassLoader <span class=\"code-snippet__keyword\">instanceof<\/span> DecoratingClassLoader) {<\/span><\/code><code><span class=\"code-snippet_outer\">          DecoratingClassLoader dcl = (DecoratingClassLoader) tempClassLoader;<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">for<\/span> (Class&lt;?&gt; typeToMatch : typesToMatch) {<\/span><\/code><code><span class=\"code-snippet_outer\">            dcl.excludeClass(typeToMatch.getName());<\/span><\/code><code><span class=\"code-snippet_outer\">          }<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__built_in\">String<\/span> className = mbd.getBeanClassName();<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (className != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ \u89e3\u6790Spring\u8868\u8fbe\u5f0f\uff0c\u6709\u53ef\u80fd\u76f4\u63a5\u8fd4\u56de\u4e86\u4e00\u4e2aClass\u5bf9\u8c61<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__built_in\">Object<\/span> evaluated = evaluateBeanDefinitionString(className, mbd);<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (!className.equals(evaluated)) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ A dynamically resolved expression, supported as of 4.2...<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">if<\/span> (evaluated <span class=\"code-snippet__keyword\">instanceof<\/span> Class) {<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">return<\/span> (Class&lt;?&gt;) evaluated;<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">else<\/span> <span class=\"code-snippet__keyword\">if<\/span> (evaluated <span class=\"code-snippet__keyword\">instanceof<\/span> <span class=\"code-snippet__built_in\">String<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">          className = (<span class=\"code-snippet__built_in\">String<\/span>) evaluated;<\/span><\/code><code><span class=\"code-snippet_outer\">          freshResolve = <span class=\"code-snippet__literal\">true<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">else<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">throw<\/span> <span class=\"code-snippet__keyword\">new<\/span> IllegalStateException(<span class=\"code-snippet__string\">\"Invalid class name expression result: \"<\/span> + evaluated);<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (freshResolve) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ When resolving against a temporary class loader, exit early in order<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ to avoid storing the resolved Class in the bean definition.<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">if<\/span> (dynamicLoader != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">return<\/span> dynamicLoader.loadClass(className);<\/span><\/code><code><span class=\"code-snippet_outer\">          }<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">catch<\/span> (ClassNotFoundException ex) {<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">if<\/span> (logger.isTraceEnabled()) {<\/span><\/code><code><span class=\"code-snippet_outer\">              logger.trace(<span class=\"code-snippet__string\">\"Could not load class [\"<\/span> + className + <span class=\"code-snippet__string\">\"] from \"<\/span> + dynamicLoader + <span class=\"code-snippet__string\">\": \"<\/span> + ex);<\/span><\/code><code><span class=\"code-snippet_outer\">            }<\/span><\/code><code><span class=\"code-snippet_outer\">          }<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">return<\/span> ClassUtils.forName(className, dynamicLoader);<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ Resolve regularly, caching the result in the BeanDefinition...<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">return<\/span> mbd.resolveBeanClass(beanClassLoader);<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p><br  \/><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u6211\u4eec\u81ea\u5df1\u7684 bean \u8d70\u4e0d\u4e86\u8fd9\u4e48\u591a\u903b\u8f91\uff0c\u6211\u4eec\u65e2\u6ca1\u6709\u4f20 typesToMatch\uff0c\u4e5f\u6ca1\u6709\u5199 Spring \u8868\u8fbe\u5f0f\uff0c\u6240\u4ee5\u5c31\u662f\u62ff\u4e86\u4e00\u4e2a\u7c7b\u52a0\u8f7d\u5668\u548c\u4f7f\u7528\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d class\uff0c\u5982\u679c\u6211\u4eec\u6ca1\u6709\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u90a3\u4e48\u4f7f\u7528\u9ed8\u8ba4\u7684\uff0c\u770b\u4e0b\u6e90\u7801\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">  @Nullable<\/span><\/code><code><span class=\"code-snippet_outer\">  public <span class=\"code-snippet__keyword\">static<\/span> ClassLoader getDefaultClassLoader() {<\/span><\/code><code><span class=\"code-snippet_outer\">    ClassLoader cl = <span class=\"code-snippet__literal\">null<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ \u4f18\u5148\u83b7\u53d6\u7ebf\u7a0b\u4e2d\u7684\u7c7b\u52a0\u8f7d\u5668<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">      cl = Thread.currentThread().getContextClassLoader();<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">catch<\/span> (Throwable ex) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ Cannot access thread context ClassLoader - falling back...<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ \u7ebf\u7a0b\u4e2d\u7c7b\u52a0\u8f7d\u5668\u4e3anull\u7684\u60c5\u51b5\u4e0b\uff0c\u83b7\u53d6\u52a0\u8f7dClassUtils\u7c7b\u7684\u7c7b\u52a0\u8f7d\u5668<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (cl == <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ No thread context class loader -&gt; use class loader of this class.<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      cl = ClassUtils.class.getClassLoader();<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (cl == <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ getClassLoader() returning null indicates the bootstrap ClassLoader<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ \u52a0\u5165ClassUtils\u662f\u88abBootstrap\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\u7684\uff0c\u5219\u83b7\u53d6\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">          cl = ClassLoader.getSystemClassLoader();<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">catch<\/span> (Throwable ex) {<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__comment\">\/\/ Cannot access system ClassLoader - oh well, maybe the caller can live with null...<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">return<\/span> cl;<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p><br  \/><\/p>\n<blockquote label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: normal;border-left-width: 5px;border-left-color: rgb(77, 124, 207);margin-left: 32px;margin-right: 30px;\">\n<ol label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" class=\"list-paddingleft-1\" style=\"width: 515.844px;color: rgb(77, 124, 207);line-height: 25.6px;font-family: PingfangSC-LIGHT, sans-serif;\">\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u4f18\u5148\u83b7\u53d6\u7ebf\u7a0b\u4e2d\u7684\u7c7b\u52a0\u8f7d\u5668<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u7ebf\u7a0b\u4e2d\u7c7b\u52a0\u8f7d\u5668\u4e3a null \u7684\u60c5\u51b5\u4e0b\uff0c\u83b7\u53d6\u52a0\u8f7d ClassUtils \u7c7b\u7684\u7c7b\u52a0\u8f7d\u5668\uff0c\u8fd9\u91cc Spring \u6ce8\u610f\u5230\u4e86 java \u7684 boostrap \u52a0\u8f7d\u5668\uff0c\u6240\u4ee5\u4f1a\u6709\u4e3a null \u7684\u60c5\u51b5<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u5982\u679c\u4e3a null\uff0c\u90a3\u4e48\u4f7f\u7528 ClassUtils \u5f53\u524d\u5de5\u5177\u7c7b\u4f7f\u7528\u7684\u662f\u54ea\u4e2a\u52a0\u8f7d\u5668<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u5047\u5982 ClassUtils \u662f\u88ab Bootstrap \u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\u7684\uff0c\u5219\u83b7\u53d6\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668<\/span><\/p>\n<\/li>\n<\/ol>\n<\/blockquote>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><br  \/><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">  public Class&lt;?&gt; resolveBeanClass(@Nullable ClassLoader classLoader) throws ClassNotFoundException {<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__built_in\">String<\/span> className = getBeanClassName();<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (className == <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">return<\/span> <span class=\"code-snippet__literal\">null<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    Class&lt;?&gt; resolvedClass = ClassUtils.forName(className, classLoader);<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">this<\/span>.beanClass = resolvedClass;<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">return<\/span> resolvedClass;<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">  public <span class=\"code-snippet__built_in\">String<\/span> getBeanClassName() {<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__built_in\">Object<\/span> beanClassObject = <span class=\"code-snippet__keyword\">this<\/span>.beanClass;<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (beanClassObject <span class=\"code-snippet__keyword\">instanceof<\/span> Class) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">return<\/span> ((Class&lt;?&gt;) beanClassObject).getName();<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">else<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">return<\/span> (<span class=\"code-snippet__built_in\">String<\/span>) beanClassObject;<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u901a\u8fc7\u8fd9\u4e00\u6b65\u4e5f\u53ef\u4ee5\u770b\u51fa bean \u5b9a\u4e49\u4e2d\u6700\u521d\u7684 beanClass \u5c5e\u6027\uff0c\u90fd\u662f String \u7c7b\u578b\u7684 beanname<\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><strong style=\"color: rgb(32, 91, 195);line-height: 25.6px;min-height: 1em;\"><em><span style=\"font-size: 24px;padding-left: 4px;font-family: PingFangSC-Semibold, sans-serif;\">2<\/span><\/em><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><br  \/><\/p>\n<h2 label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin-top: -10px;font-family: PingfangSC-LIGHT, sans-serif;line-height: 9px;color: white;border-radius: 10px;background-image: linear-gradient(to right, rgb(32, 91, 195) 40%, rgb(166, 189, 231) 10%);background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;\">&nbsp; &nbsp;<\/h2>\n<p style=\"margin: 20px;white-space: pre-wrap;color: rgb(137, 137, 137);line-height: 1.5;\"><strong style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;font-family: PingFangSC-Semibold, sans-serif;\"><jncounttag><\/jncounttag>resolveBeforeInstantiation<\/span><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u8fd9\u4e00\u6b65\u8d70\u7684\u662f\u5b9e\u4f8b\u5316\u524d\u7684\u5de5\u4f5c\uff0c\u5f53\u7136\u5982\u679c\u4f60\u60f3\u5728\u8fd9\u4e00\u6b65\u4e2d\u76f4\u63a5\u8fd4\u56de\u5b9e\u4f53\u7c7b\u4e5f\u53ef\uff0c\u800c\u4e14\u6700\u79bb\u8c31\u7684\u662f Spring \u5e76\u6ca1\u6709\u6821\u9a8c\u4f60\u8fd4\u56de\u7684\u7c7b\u662f\u5426\u662f\u5f53\u524d beanname \u7684\u7c7b\uff0c\u53ef\u4ee5\u770b\u4e0b\u6e90\u7801\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">  @Nullable<\/span><\/code><code><span class=\"code-snippet_outer\">  protected <span class=\"code-snippet__built_in\">Object<\/span> resolveBeforeInstantiation(<span class=\"code-snippet__built_in\">String<\/span> beanName, RootBeanDefinition mbd) {<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__built_in\">Object<\/span> bean = <span class=\"code-snippet__literal\">null<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (!<span class=\"code-snippet__built_in\">Boolean<\/span>.FALSE.equals(mbd.beforeInstantiationResolved)) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ Make sure bean class is actually resolved at this point.<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ synthetic\u8868\u793a\u5408\u6210\uff0c\u5982\u679c\u67d0\u4e9bBean\u5f0f\u5408\u6210\u7684\uff0c\u90a3\u4e48\u5219\u4e0d\u4f1a\u7ecf\u8fc7BeanPostProcessor\u7684\u5904\u7406<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (!mbd.isSynthetic() &amp;&amp; hasInstantiationAwareBeanPostProcessors()) {<\/span><\/code><code><span class=\"code-snippet_outer\">        Class&lt;?&gt; targetType = determineTargetType(beanName, mbd);<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">if<\/span> (targetType != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">          bean = applyBeanPostProcessorsBeforeInstantiation(targetType, beanName);<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">if<\/span> (bean != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">            bean = applyBeanPostProcessorsAfterInitialization(bean, beanName);<\/span><\/code><code><span class=\"code-snippet_outer\">          }<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">      mbd.beforeInstantiationResolved = (bean != <span class=\"code-snippet__literal\">null<\/span>);<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">return<\/span> bean;<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p><br  \/><\/p>\n<blockquote label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: normal;border-left-width: 5px;border-left-color: rgb(77, 124, 207);margin-left: 32px;margin-right: 30px;\">\n<ol label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" class=\"list-paddingleft-1\" style=\"width: 515.844px;color: rgb(77, 124, 207);line-height: 25.6px;font-family: PingfangSC-LIGHT, sans-serif;\">\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">hasInstantiationAwareBeanPostProcessors\uff1a\u76f4\u63a5\u4ece\u7f13\u5b58 list \u4e2d\u83b7\u53d6\u6709\u5173\u5b9e\u4f8b\u5316\u7684 BeanPostProcessors\uff0c\u8fd9\u91cc\u662f\u4e00\u4e2a\u4f18\u5316\uff0c\u8981\u4e0d\u7136\u6bcf\u6b21\u83b7\u53d6\u6709\u5173\u5b9e\u4f8b\u5316\u7684 BeanPostProcessors \u90fd\u662f\u904d\u5386\u6574\u4e2a BeanPostProcessors \u518d\u52a0\u4e2a\u6821\u9a8c<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">determineTargetType\uff1a\u83b7\u53d6\u7c7b<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">applyBeanPostProcessorsBeforeInstantiation\uff1a\u6267\u884c InstantiationAwareBeanPostProcessor \u7684 postProcessBeforeInstantiation \u7684\u65b9\u6cd5\uff0c\u8be5\u65b9\u6cd5\u53ef\u4ee5\u8fd4\u56de bean\u3002<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">postProcessAfterInstantiation\uff1a\u6267\u884c BeanPostProcessor \u7684 postProcessAfterInstantiation \u7684\u65b9\u6cd5\uff0c\u6b63\u5e38\u6211\u4eec\u7684 bean \u4e0d\u4f1a\u8d70\u5230\u8fd9\u91cc\uff0c\u56e0\u4e3a\u5b9e\u4f8b\u5316\u524d\u6839\u672c\u6ca1\u6709\u521b\u5efa\u51fa\u6765 bean\uff0c\u6240\u4ee5\u4e5f\u5c31\u662f bean != null \u4e00\u76f4\u4e3a false<\/span><\/p>\n<\/li>\n<\/ol>\n<\/blockquote>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u5f53\u7136\u9664\u975e\u4f60\u81ea\u5df1\u5199\u4e00\u4e2a InstantiationAwareBeanPostProcessors\uff0c\u5176\u5b9e\u771f\u6ca1\u770b\u89c1\u8fd9\u4e48\u73a9\u7684\uff0c\u4e3b\u8981\u662f\u6ca1\u6709\u5565\u610f\u4e49\uff0c\u6bd4\u5982\u8fd9\u6837\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">@Component<\/span><\/code><code><span class=\"code-snippet_outer\">public <span class=\"code-snippet__class\"><span class=\"code-snippet__keyword\">class<\/span> <span class=\"code-snippet__title\">MyInstantiationAwareBeanPostProcessors<\/span> <span class=\"code-snippet__title\">implements<\/span> <span class=\"code-snippet__title\">InstantiationAwareBeanPostProcessor<\/span> <\/span>{<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">  @Override<\/span><\/code><code><span class=\"code-snippet_outer\">  public <span class=\"code-snippet__built_in\">Object<\/span> postProcessBeforeInstantiation(Class&lt;?&gt; beanClass, <span class=\"code-snippet__built_in\">String<\/span> beanName) throws BeansException {<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (beanName.equals(<span class=\"code-snippet__string\">\"userService\"<\/span>)) {<\/span><\/code><code><span class=\"code-snippet_outer\">      System.out.println(<span class=\"code-snippet__string\">\"MyInstantiationAwareBeanPostProcessors.postProcessBeforeInstantiation\"<\/span>);<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">return<\/span> <span class=\"code-snippet__keyword\">new<\/span> First();<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">return<\/span> <span class=\"code-snippet__literal\">null<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">  @Override<\/span><\/code><code><span class=\"code-snippet_outer\">  public <span class=\"code-snippet__built_in\">Object<\/span> postProcessAfterInitialization(<span class=\"code-snippet__built_in\">Object<\/span> bean, <span class=\"code-snippet__built_in\">String<\/span> beanName) throws BeansException {<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (beanName.equals(<span class=\"code-snippet__string\">\"userService\"<\/span>)) {<\/span><\/code><code><span class=\"code-snippet_outer\">      System.out.println(<span class=\"code-snippet__string\">\"MyInstantiationAwareBeanPostProcessors.postProcessAfterInitialization\"<\/span>);<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">return<\/span> <span class=\"code-snippet__keyword\">new<\/span> Second();<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">return<\/span> bean;<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><code><span class=\"code-snippet_outer\">}<\/span><\/code><\/pre>\n<\/section>\n<p><br  \/><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(0, 0, 0);text-align: center;line-height: 1.5;\"><span style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;\"><span style=\"color: rgb(137, 137, 137);line-height: 1.5;\"><span style=\"color: rgb(62, 62, 62);font-family: PingfangSC-Ultralight, sans-serif;\"><strong style=\"color:rgb(32, 91, 195);\">\/ <\/strong>\u518d\u575a\u6301\u4e00\u4e0b\uff0c\u8ba9\u6211\u628a\u5b9e\u4f8b\u5316\u8fc7\u7a0b\u5148\u8bb2\u5b8c\uff01<strong style=\"color:rgb(32, 91, 195);\"> \/<\/strong><\/span><\/span><\/span><\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u73b0\u5728\u7684\u903b\u8f91\u5df2\u7ecf\u8d70\u5b8c\u4e86\u5b9e\u4f8b\u5316\u524d\u7684 postProcessBeforeInstantiation \u65b9\u6cd5\uff0c\u90a3\u4e48\u73b0\u5728\u6211\u4eec\u7684 bean \u8981\u8fdb\u884c\u5b9e\u4f8b\u5316\u4e86\uff0c<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">  protected <span class=\"code-snippet__built_in\">Object<\/span> doCreateBean(<span class=\"code-snippet__built_in\">String<\/span> beanName, RootBeanDefinition mbd, @Nullable <span class=\"code-snippet__built_in\">Object<\/span>[] args)<\/span><\/code><code><span class=\"code-snippet_outer\">      throws BeanCreationException {<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ \u5b9e\u4f8b\u5316bean<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ Instantiate the bean.<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    BeanWrapper instanceWrapper = <span class=\"code-snippet__literal\">null<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (mbd.isSingleton()) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ \u6709\u53ef\u80fd\u5728\u672cBean\u521b\u5efa\u4e4b\u524d\uff0c\u5c31\u6709\u5176\u4ed6Bean\u628a\u5f53\u524dBean\u7ed9\u521b\u5efa\u51fa\u6765\u4e86\uff08\u6bd4\u5982\u4f9d\u8d56\u6ce8\u5165\u8fc7\u7a0b\u4e2d\uff09<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      instanceWrapper = <span class=\"code-snippet__keyword\">this<\/span>.factoryBeanInstanceCache.remove(beanName);<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (instanceWrapper == <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ \u521b\u5efaBean\u5b9e\u4f8b<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      instanceWrapper = createBeanInstance(beanName, mbd, args);<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__built_in\">Object<\/span> bean = instanceWrapper.getWrappedInstance();<\/span><\/code><code><span class=\"code-snippet_outer\">    Class&lt;?&gt; beanType = instanceWrapper.getWrappedClass();<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (beanType != NullBean.class) {<\/span><\/code><code><span class=\"code-snippet_outer\">      mbd.resolvedTargetType = beanType;<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ \u540e\u7f6e\u5904\u7406\u5408\u5e76\u540e\u7684BeanDefinition<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ Allow post-processors to modify the merged bean definition.<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    synchronized (mbd.postProcessingLock) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (!mbd.postProcessed) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">          applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">catch<\/span> (Throwable ex) {<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">throw<\/span> <span class=\"code-snippet__keyword\">new<\/span> BeanCreationException(mbd.getResourceDescription(), beanName,<\/span><\/code><code><span class=\"code-snippet_outer\">              <span class=\"code-snippet__string\">\"Post-processing of merged bean definition failed\"<\/span>, ex);<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">        mbd.postProcessed = <span class=\"code-snippet__literal\">true<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ \u4e3a\u4e86\u89e3\u51b3\u5faa\u73af\u4f9d\u8d56\u63d0\u524d\u7f13\u5b58\u5355\u4f8b\u521b\u5efa\u5de5\u5382<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ Eagerly cache singletons to be able to resolve circular references<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ even when triggered by lifecycle interfaces like BeanFactoryAware.<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    boolean earlySingletonExposure = (mbd.isSingleton() &amp;&amp; <span class=\"code-snippet__keyword\">this<\/span>.allowCircularReferences &amp;&amp;<\/span><\/code><code><span class=\"code-snippet_outer\">        isSingletonCurrentlyInCreation(beanName));<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (earlySingletonExposure) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (logger.isTraceEnabled()) {<\/span><\/code><code><span class=\"code-snippet_outer\">        logger.trace(<span class=\"code-snippet__string\">\"Eagerly caching bean '\"<\/span> + beanName +<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__string\">\"' to allow for resolving potential circular references\"<\/span>);<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ \u5faa\u73af\u4f9d\u8d56-\u6dfb\u52a0\u5230\u4e09\u7ea7\u7f13\u5b58<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      addSingletonFactory(beanName, () -&gt; getEarlyBeanReference(beanName, mbd, bean));<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ Initialize the bean instance.<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__built_in\">Object<\/span> exposedObject = bean;<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ \u5c5e\u6027\u586b\u5145<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      populateBean(beanName, mbd, instanceWrapper);<\/span><\/code><code><span class=\"code-snippet_outer\">      ......<\/span><\/code><code><span class=\"code-snippet_outer\">    return exposedObject;<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u8ddf\u8fd9\u7bc7\u65e0\u5173\u7684\u5185\u5bb9\u80fd\u5220\u9664\u7684\u90fd\u5220\u9664\u4e86\uff0c\u4e3b\u8981\u6709\u8fd9\u51e0\u6b65\u6211\u4eec\u9700\u8981\u6ce8\u610f\u4e0b\uff1a<\/span><\/p>\n<blockquote label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: normal;border-left-width: 5px;border-left-color: rgb(77, 124, 207);margin-left: 32px;margin-right: 30px;\">\n<ol label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" class=\"list-paddingleft-1\" style=\"width: 515.844px;color: rgb(77, 124, 207);line-height: 25.6px;font-family: PingfangSC-LIGHT, sans-serif;\">\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">createBeanInstance\uff1a\u521b\u5efa\u5b9e\u4f8b\uff0c\u524d\u63d0\u662f\u4e4b\u524d\u6ca1\u6709\u521b\u5efa\u8fc7<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">applyMergedBeanDefinitionPostProcessors\uff1a\u627e\u5230\u6ce8\u5165\u70b9\uff0c\u6bd4\u5982 AutowiredAnnotationBeanPostProcessor\uff08@Autowired\u3001@Value\u3001@Inject\uff09\u548c CommonAnnotationBeanPostProcessor\uff08@Resource\uff09\uff0c\u8fd9\u5728\u5b9e\u4f8b\u5316\u524d\u548c\u5b9e\u4f8b\u5316\u540e\u65b9\u6cd5\u4e2d\u95f4\u5939\u4e86\u4e00\u4e2a\u5904\u7406\u5408\u5e76 bean \u5b9a\u4e49\u7684\u903b\u8f91\uff0c\u6ce8\u610f\u4e00\u4e0b<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">addSingletonFactory\uff1a\u6dfb\u52a0\u7f13\u5b58\uff0c\u7528\u6765\u89e3\u51b3\u5faa\u73af\u4f9d\u8d56\uff0c\u4ee5\u540e\u5355\u72ec\u8bb2\u89e3<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">populateBean\uff1a\u8fd9\u4e00\u65b9\u6cd5\u4e3b\u8981\u662f\u5c5e\u6027\u586b\u5145\u4e5f\u5c31\u662f\u4f9d\u8d56\u6ce8\u5165\u7684\uff0c\u4f46\u662f\u5b98\u65b9\u628a\u5b9e\u4f8b\u5316\u540e\u7684 PostProcessors \u65b9\u6cd5\u5199\u5230\u8fd9\u91cc\u4e86\uff0c\u6240\u4ee5\u4e5f\u5f97\u8d34\u51fa\u6765\uff0c\u4f46\u662f\u6211\u4eec\u53ea\u770b\u5b9e\u4f8b\u5316\u76f8\u5173\u7684\u3002<\/span><\/p>\n<\/li>\n<\/ol>\n<\/blockquote>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><strong style=\"color: rgb(32, 91, 195);line-height: 25.6px;min-height: 1em;\"><em><span style=\"font-size: 24px;padding-left: 4px;font-family: PingFangSC-Semibold, sans-serif;\">3<\/span><\/em><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><br  \/><\/p>\n<h2 label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin-top: -10px;font-family: PingfangSC-LIGHT, sans-serif;line-height: 9px;color: white;border-radius: 10px;background-image: linear-gradient(to right, rgb(32, 91, 195) 60%, rgb(166, 189, 231) 10%);background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;\">&nbsp; &nbsp;<\/h2>\n<p style=\"margin: 20px;white-space: pre-wrap;color: rgb(137, 137, 137);line-height: 1.5;\"><strong style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;font-family: PingFangSC-Semibold, sans-serif;\"><jncounttag><\/jncounttag>createBeanInstance<\/span><\/strong><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">  protected BeanWrapper createBeanInstance(<span class=\"code-snippet__built_in\">String<\/span> beanName, RootBeanDefinition mbd, @Nullable <span class=\"code-snippet__built_in\">Object<\/span>[] args) {<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ Make sure bean class is actually resolved at this point.<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    Class&lt;?&gt; beanClass = resolveBeanClass(mbd, beanName);<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (beanClass != <span class=\"code-snippet__literal\">null<\/span> &amp;&amp; !Modifier.isPublic(beanClass.getModifiers()) &amp;&amp; !mbd.isNonPublicAccessAllowed()) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">throw<\/span> <span class=\"code-snippet__keyword\">new<\/span> BeanCreationException(mbd.getResourceDescription(), beanName,<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__string\">\"Bean class isn't public, and non-public access not allowed: \"<\/span> + beanClass.getName());<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ BeanDefinition\u4e2d\u6dfb\u52a0\u4e86Supplier\uff0c\u5219\u8c03\u7528Supplier\u6765\u5f97\u5230\u5bf9\u8c61<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    Supplier&lt;?&gt; instanceSupplier = mbd.getInstanceSupplier();<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (instanceSupplier != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">return<\/span> obtainFromSupplier(instanceSupplier, beanName);<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ @Bean\u5bf9\u5e94\u7684BeanDefinition<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (mbd.getFactoryMethodName() != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">return<\/span> instantiateUsingFactoryMethod(beanName, mbd, args);<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    ......<\/span><\/code><code><span class=\"code-snippet_outer\">    return instantiateBean(beanName, mbd);<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p><br  \/><\/p>\n<blockquote label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: normal;border-left-width: 5px;border-left-color: rgb(77, 124, 207);margin-left: 32px;margin-right: 30px;\">\n<ol label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" class=\"list-paddingleft-1\" style=\"width: 515.844px;color: rgb(77, 124, 207);line-height: 25.6px;font-family: PingfangSC-LIGHT, sans-serif;\">\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">resolveBeanClass:\u4e4b\u524d\u8bb2\u89e3\u8fc7\u4e86\uff0c\u4e0d\u91cd\u590d\u8bb2\u4e86\uff0c\u5c31\u662f\u62ff\u5230 class<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">obtainFromSupplier\uff1a\u901a\u8fc7 Supplier \u51fd\u6570\u83b7\u53d6 bean\uff0c\u524d\u63d0\u662f\u4f60\u5f97\u58f0\u660e bean \u5b9a\u4e49<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">instantiateUsingFactoryMethod\uff1a\u8fd9\u79cd\u662f\u4f7f\u7528@Bean \u65b9\u6cd5\u5b9e\u4f8b\u5316\u5bf9\u8c61\uff0c<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u540e\u9762\u7701\u7565\u4e86\u63a8\u65ad\u6784\u9020\u65b9\u6cd5\u8fdb\u884c\u5b9e\u4f8b\u5316\u5bf9\u8c61\uff0c\u4ee5\u540e\u5355\u72ec\u8bb2\u89e3\u63a8\u65ad\u6784\u9020\u65b9\u6cd5<\/span><\/p>\n<\/li>\n<\/ol>\n<\/blockquote>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><span style=\"margin-left: 10px;color: rgb(99, 141, 213);\"><strong><em><span style=\"font-size: 24px;padding-left: 4px;font-family: PingFangSC-Semibold, sans-serif;\">3.1<\/span><\/em><\/strong><\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><br  \/><\/p>\n<h3 label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin-top: -10px;line-height: 5px;background-image: linear-gradient(to right, rgb(99, 141, 213), rgb(133, 165, 222));background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;\">&nbsp; &nbsp;<\/h3>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(137, 137, 137);line-height: 1.5;\"><strong style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;\"><strong style=\"color: rgb(137, 137, 137);font-size: 18px;line-height: 1.5;white-space: normal;\"><span style=\"color: rgb(62, 62, 62);font-family: PingFangSC-Semibold, sans-serif;\">obtainFromSupplier<\/span><\/strong><\/span><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u8fd9\u4e00\u6b65\u5176\u5b9e\u6211\u4eec\u7528\u5230\u7684\u5f88\u5c11\uff0c\u4e3b\u8981\u662f\u8003\u8651\u5230 Spring \u81ea\u52a8\u6ce8\u5165\u7684\u5f00\u9500\uff0c\u6211\u4eec\u81ea\u5df1\u53ef\u4ee5\u5c31\u884c\u5b9e\u4f8b\u5316\u800c\u5df2\uff0c\u6bd4\u5982\u6211\u4eec\u8fd9\u6837\u5199\u7167\u6837\u53ef\u4ee5\u83b7\u53d6 bean\uff0c\u4f46\u662f\u4e0d\u4f1a\u7531 Spring \u5e2e\u6211\u4eec\u6ce8\u5165\uff0c\u5f97\u9760\u81ea\u5df1\u4e86\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__comment\">\/\/  \u521b\u5efa\u4e00\u4e2aSpring\u5bb9\u5668<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">  AnnotationConfigApplicationContext applicationContext = <span class=\"code-snippet__keyword\">new<\/span> AnnotationConfigApplicationContext(AppConfig.class);<\/span><\/code><code><span class=\"code-snippet_outer\">  AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();<\/span><\/code><code><span class=\"code-snippet_outer\">  beanDefinition.setBeanClass(UserService.class);<\/span><\/code><code><span class=\"code-snippet_outer\">  beanDefinition.setInstanceSupplier(() -&gt; <span class=\"code-snippet__keyword\">new<\/span> UserService());<\/span><\/code><code><span class=\"code-snippet_outer\">  applicationContext.registerBeanDefinition(<span class=\"code-snippet__string\">\"userService\"<\/span>, beanDefinition);<\/span><\/code><code><span class=\"code-snippet_outer\">  UserService userService = (UserService) applicationContext.getBean(UserService.class);<\/span><\/code><code><span class=\"code-snippet_outer\">  userService.test();<\/span><\/code><\/pre>\n<\/section>\n<p><br  \/><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u5176\u5b9e\u7528\u6cd5\u548c@bean \u6ce8\u89e3\u76f8\u4f3c\uff0c\u9664\u4e86\u51cf\u5c11 Spring \u81ea\u52a8\u6ce8\u5165\u7684\u5f00\u9500\uff0c\u5b9e\u5728\u6ca1\u60f3\u5230\u6709\u5565\u7528<\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><span style=\"margin-left: 10px;color: rgb(99, 141, 213);\"><strong><em><span style=\"font-size: 24px;padding-left: 4px;font-family: PingFangSC-Semibold, sans-serif;\">3.2<\/span><\/em><\/strong><\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><br  \/><\/p>\n<h3 label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin-top: -10px;line-height: 5px;background-image: linear-gradient(to right, rgb(99, 141, 213), rgb(133, 165, 222));background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;\">&nbsp; &nbsp;<\/h3>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(137, 137, 137);line-height: 1.5;\"><strong style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;\"><strong style=\"color: rgb(137, 137, 137);font-size: 18px;line-height: 1.5;white-space: normal;\"><span style=\"color: rgb(62, 62, 62);font-family: PingFangSC-Semibold, sans-serif;\">instantiateUsingFactoryMethod<\/span><\/strong><\/span><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u8be5\u65b9\u6cd5\u5185\u90e8\u903b\u8f91\u5f88\u591a\uff0c\u4e3a\u4e86\u66f4\u52a0\u76f4\u89c2\u7684\u5c55\u73b0\uff0c\u53ea\u8d34\u51fa\u5173\u952e\u4ee3\u7801\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">  @Override<\/span><\/code><code><span class=\"code-snippet_outer\">  public <span class=\"code-snippet__built_in\">Object<\/span> instantiate(RootBeanDefinition bd, @Nullable <span class=\"code-snippet__built_in\">String<\/span> beanName, BeanFactory owner,<\/span><\/code><code><span class=\"code-snippet_outer\">      @Nullable <span class=\"code-snippet__built_in\">Object<\/span> factoryBean, final Method factoryMethod, <span class=\"code-snippet__built_in\">Object<\/span>... args) {<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (System.getSecurityManager() != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">        AccessController.doPrivileged((PrivilegedAction&lt;<span class=\"code-snippet__built_in\">Object<\/span>&gt;) () -&gt; {<\/span><\/code><code><span class=\"code-snippet_outer\">          ReflectionUtils.makeAccessible(factoryMethod);<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">return<\/span> <span class=\"code-snippet__literal\">null<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">        });<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">else<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">        ReflectionUtils.makeAccessible(factoryMethod);<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">      Method priorInvokedFactoryMethod = currentlyInvokedFactoryMethod.get();<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">        currentlyInvokedFactoryMethod.set(factoryMethod);<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ factoryBean\u5c31\u662fAppConfig\u7684\u4ee3\u7406\u5bf9\u8c61\uff08\u5982\u679c\u52a0\u4e86@Configuration\uff09<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ factoryMethod\u5c31\u662f@Bean\u4fee\u9970\u7684\u65b9\u6cd5<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__built_in\">Object<\/span> result = factoryMethod.invoke(factoryBean, args);<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">if<\/span> (result == <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">          result = <span class=\"code-snippet__keyword\">new<\/span> NullBean();<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">return<\/span> result;<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">finally<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">if<\/span> (priorInvokedFactoryMethod != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">          currentlyInvokedFactoryMethod.set(priorInvokedFactoryMethod);<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">else<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">          currentlyInvokedFactoryMethod.remove();<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    ......<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u6bd4\u5982\u6211\u4eec\u5b9a\u4e49\u7684\u914d\u7f6e\u7c7b\u4e2d\u6709\u5f88\u591a@Bean \u5f62\u5f0f\u7684\u65b9\u6cd5\uff0c\u6700\u7ec8 Spring \u4f1a\u76f4\u63a5 invoke \u8c03\u7528\u88ab@Bean \u4fee\u9970\u7684\u65b9\u6cd5\u4ece\u800c\u5b9e\u73b0\u5b9e\u4f8b\u5316\u5bf9\u8c61\u3002<\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><strong style=\"color: rgb(32, 91, 195);line-height: 25.6px;min-height: 1em;\"><em><span style=\"font-size: 24px;padding-left: 4px;font-family: PingFangSC-Semibold, sans-serif;\">4<\/span><\/em><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><br  \/><\/p>\n<h2 label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin-top: -10px;font-family: PingfangSC-LIGHT, sans-serif;line-height: 9px;color: white;border-radius: 10px;background-image: linear-gradient(to right, rgb(32, 91, 195) 80%, rgb(166, 189, 231) 10%);background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;\">&nbsp; &nbsp;<\/h2>\n<p style=\"margin: 20px;white-space: pre-wrap;color: rgb(137, 137, 137);line-height: 1.5;\"><strong style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;font-family: PingFangSC-Semibold, sans-serif;\"><jncounttag><\/jncounttag>applyMergedBeanDefinitionPostProcessors<\/span><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u8fd9\u91cc\u5173\u4e8e MergedBeanDefinitionPostProcessors \u7684\u5b9e\u73b0\u7c7b\u4e0d\u5168\u8bb2\u89e3\u4e86\uff0c\u4e3b\u8981\u8bb2\u89e3\u4e0b\u5de5\u4f5c\u5e38\u7528\u7684\u6ce8\u89e3 AutowiredAnnotationBeanPostProcessor\uff0c\u4ed6\u662f\u7528\u6765\u89e3\u6790@Autowired\u3001@Value\u3001@Inject\uff0c\u770b\u4e0b\u4ed6\u7684\u9ed8\u8ba4\u6e90\u7801\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">public AutowiredAnnotationBeanPostProcessor() {<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">this<\/span>.autowiredAnnotationTypes.add(Autowired.class);<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">this<\/span>.autowiredAnnotationTypes.add(Value.class);<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">this<\/span>.autowiredAnnotationTypes.add((Class&lt;? extends Annotation&gt;)<\/span><\/code><code><span class=\"code-snippet_outer\">          ClassUtils.forName(<span class=\"code-snippet__string\">\"javax.inject.Inject\"<\/span>, AutowiredAnnotationBeanPostProcessor.class.getClassLoader()));<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><\/pre>\n<\/section>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u770b\u4e0b\u4ed6\u4e3b\u8981\u505a\u4e86\u90a3\u4e9b\u5de5\u4f5c\uff0c\u5173\u952e\u4ee3\u7801\u9644\u4e0a\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">private InjectionMetadata buildAutowiringMetadata(final Class&lt;?&gt; clazz) {<\/span><\/code><code><span class=\"code-snippet_outer\">  <span class=\"code-snippet__comment\">\/\/ \u5982\u679c\u4e00\u4e2aBean\u7684\u7c7b\u578b\u662fString...\uff0c\u90a3\u4e48\u5219\u6839\u672c\u4e0d\u9700\u8981\u8fdb\u884c\u4f9d\u8d56\u6ce8\u5165<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">  <span class=\"code-snippet__keyword\">if<\/span> (!AnnotationUtils.isCandidateClass(clazz, <span class=\"code-snippet__keyword\">this<\/span>.autowiredAnnotationTypes)) {<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">return<\/span> InjectionMetadata.EMPTY;<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">  List&lt;InjectionMetadata.InjectedElement&gt; elements = <span class=\"code-snippet__keyword\">new<\/span> ArrayList&lt;&gt;();<\/span><\/code><code><span class=\"code-snippet_outer\">  Class&lt;?&gt; targetClass = clazz;<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">  <span class=\"code-snippet__keyword\">do<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">    final List&lt;InjectionMetadata.InjectedElement&gt; currElements = <span class=\"code-snippet__keyword\">new<\/span> ArrayList&lt;&gt;();<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ \u904d\u5386targetClass\u4e2d\u7684\u6240\u6709Field<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    ReflectionUtils.doWithLocalFields(targetClass, field -&gt; {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ field\u4e0a\u662f\u5426\u5b58\u5728@Autowired\u3001@Value\u3001@Inject\u4e2d\u7684\u5176\u4e2d\u4e00\u4e2a<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      MergedAnnotation&lt;?&gt; ann = findAutowiredAnnotation(field);<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (ann != <span class=\"code-snippet__literal\">null<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ static filed\u4e0d\u662f\u6ce8\u5165\u70b9\uff0c\u4e0d\u4f1a\u8fdb\u884c\u81ea\u52a8\u6ce8\u5165<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">if<\/span> (Modifier.isStatic(field.getModifiers())) {<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">if<\/span> (logger.isInfoEnabled()) {<\/span><\/code><code><span class=\"code-snippet_outer\">            logger.info(<span class=\"code-snippet__string\">\"Autowired annotation is not supported on static fields: \"<\/span> + field);<\/span><\/code><code><span class=\"code-snippet_outer\">          }<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">return<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ \u6784\u9020\u6ce8\u5165\u70b9<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        boolean required = determineRequiredStatus(ann);<\/span><\/code><code><span class=\"code-snippet_outer\">        currElements.add(<span class=\"code-snippet__keyword\">new<\/span> AutowiredFieldElement(field, required));<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">    });<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ \u904d\u5386targetClass\u4e2d\u7684\u6240\u6709Method<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    ReflectionUtils.doWithLocalMethods(targetClass, method -&gt; {<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">      Method bridgedMethod = BridgeMethodResolver.findBridgedMethod(method);<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (!BridgeMethodResolver.isVisibilityBridgeMethodPair(method, bridgedMethod)) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">return<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__comment\">\/\/ method\u4e0a\u662f\u5426\u5b58\u5728@Autowired\u3001@Value\u3001@Inject\u4e2d\u7684\u5176\u4e2d\u4e00\u4e2a<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">      MergedAnnotation&lt;?&gt; ann = findAutowiredAnnotation(bridgedMethod);<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">if<\/span> (ann != <span class=\"code-snippet__literal\">null<\/span> &amp;&amp; method.equals(ClassUtils.getMostSpecificMethod(method, clazz))) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ static method\u4e0d\u662f\u6ce8\u5165\u70b9\uff0c\u4e0d\u4f1a\u8fdb\u884c\u81ea\u52a8\u6ce8\u5165<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">if<\/span> (Modifier.isStatic(method.getModifiers())) {<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">if<\/span> (logger.isInfoEnabled()) {<\/span><\/code><code><span class=\"code-snippet_outer\">            logger.info(<span class=\"code-snippet__string\">\"Autowired annotation is not supported on static methods: \"<\/span> + method);<\/span><\/code><code><span class=\"code-snippet_outer\">          }<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">return<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__comment\">\/\/ set\u65b9\u6cd5\u6700\u597d\u6709\u5165\u53c2<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">if<\/span> (method.getParameterCount() == <span class=\"code-snippet__number\">0<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">if<\/span> (logger.isInfoEnabled()) {<\/span><\/code><code><span class=\"code-snippet_outer\">            logger.info(<span class=\"code-snippet__string\">\"Autowired annotation should only be used on methods with parameters: \"<\/span> +<\/span><\/code><code><span class=\"code-snippet_outer\">                  method);<\/span><\/code><code><span class=\"code-snippet_outer\">          }<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">        boolean required = determineRequiredStatus(ann);<\/span><\/code><code><span class=\"code-snippet_outer\">        PropertyDescriptor pd = BeanUtils.findPropertyForMethod(bridgedMethod, clazz);<\/span><\/code><code><span class=\"code-snippet_outer\">        currElements.add(<span class=\"code-snippet__keyword\">new<\/span> AutowiredMethodElement(method, required, pd));<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">    });<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">    elements.addAll(<span class=\"code-snippet__number\">0<\/span>, currElements);<\/span><\/code><code><span class=\"code-snippet_outer\">    targetClass = targetClass.getSuperclass();<\/span><\/code><code><span class=\"code-snippet_outer\">  }<\/span><\/code><code><span class=\"code-snippet_outer\">  <span class=\"code-snippet__keyword\">while<\/span> (targetClass != <span class=\"code-snippet__literal\">null<\/span> &amp;&amp; targetClass != <span class=\"code-snippet__built_in\">Object<\/span>.class);<\/span><\/code><code><span class=\"code-snippet_outer\"><br  \/><\/span><\/code><code><span class=\"code-snippet_outer\">  <span class=\"code-snippet__keyword\">return<\/span> InjectionMetadata.forElements(elements, clazz);<\/span><\/code><code><span class=\"code-snippet_outer\">}<\/span><\/code><\/pre>\n<\/section>\n<p><br  \/><\/p>\n<blockquote label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: normal;border-left-width: 5px;border-left-color: rgb(77, 124, 207);margin-left: 32px;margin-right: 30px;\">\n<ol label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" class=\"list-paddingleft-1\" style=\"width: 515.844px;color: rgb(77, 124, 207);line-height: 25.6px;font-family: PingfangSC-LIGHT, sans-serif;\">\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u5982\u679c\u4e00\u4e2a Bean \u7684\u7c7b\u578b\u662f String\uff0c\u90a3\u4e48\u5219\u6839\u672c\u4e0d\u9700\u8981\u8fdb\u884c\u4f9d\u8d56\u6ce8\u5165<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u904d\u5386 targetClass \u4e2d\u7684\u6240\u6709 Field\uff0c\u662f\u5426\u5b58\u5728@Autowired\u3001@Value\u3001@Inject \u4e2d\u7684\u5176\u4e2d\u4e00\u4e2a\uff0c\u5982\u679c\u662f static \u5b57\u6bb5\u5219\u4e0d\u6ce8\u5165\u5426\u5219\u8bb0\u5f55\u6784\u9020\u6ce8\u5165\u70b9<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u904d\u5386 targetClass \u4e2d\u7684\u6240\u6709 Method\uff0c\u662f\u5426\u5b58\u5728@Autowired\u3001@Value\u3001@Inject \u4e2d\u7684\u5176\u4e2d\u4e00\u4e2a\uff0c\u5982\u679c\u662f static \u5b57\u6bb5\u5219\u4e0d\u6ce8\u5165\u5426\u5219\u8bb0\u5f55\u6784\u9020\u6ce8\u5165\u70b9<\/span><\/p>\n<\/li>\n<\/ol>\n<\/blockquote>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><strong style=\"color: rgb(32, 91, 195);line-height: 25.6px;min-height: 1em;\"><em><span style=\"font-size: 24px;padding-left: 4px;font-family: PingFangSC-Semibold, sans-serif;\">5<\/span><\/em><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: pre-wrap;color: rgb(62, 62, 62);\"><br  \/><\/p>\n<h2 label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin-top: -10px;font-family: PingfangSC-LIGHT, sans-serif;line-height: 9px;color: white;border-radius: 10px;background-image: linear-gradient(to right, rgb(32, 91, 195) 100%, rgb(166, 189, 231) 10%);background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;\">&nbsp; &nbsp;<\/h2>\n<p style=\"margin: 20px;white-space: pre-wrap;color: rgb(137, 137, 137);line-height: 1.5;\"><strong style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;font-family: PingFangSC-Semibold, sans-serif;\"><jncounttag><\/jncounttag>populateBean<\/span><\/strong><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u8fd9\u4e2a\u65b9\u6cd5\u4e3b\u8981\u662f\u5c5e\u6027\u586b\u5145\uff0c\u4e5f\u5c31\u662f\u6240\u8bf4\u7684\u4f9d\u8d56\u6ce8\u5165\u7684\u8fc7\u7a0b\uff0c\u6211\u4eec\u4e0d\u8bb2\u89e3\u8fd9\u4e00\u90e8\u5206\uff0c\u53ea\u8bb2\u89e3\u5173\u4e8e\u5b9e\u4f8b\u5316\u6700\u540e\u7684\u9636\u6bb5 postProcessAfterInstantiation \u65b9\u6cd5\uff0c\u65b9\u6cd5\u8fdb\u6765\u7b2c\u4e00\u6b65\u5c31\u662f\u8c03\u7528 postProcessAfterInstantiation \u65b9\u6cd5\u3002\u4f46\u662f\u53ea\u770b Spring \u6e90\u7801\u7684\u8bdd\uff0c\u5176\u5b9e\u5e76\u6ca1\u6709\u592a\u591a\u5b9e\u73b0\uff0c\u90fd\u662f\u9ed8\u8ba4\u5b9e\u73b0\u65b9\u6cd5\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"javascript\"><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">if<\/span> (!mbd.isSynthetic() &amp;&amp; hasInstantiationAwareBeanPostProcessors()) {<\/span><\/code><code><span class=\"code-snippet_outer\">      <span class=\"code-snippet__keyword\">for<\/span> (InstantiationAwareBeanPostProcessor bp : getBeanPostProcessorCache().instantiationAware) {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">if<\/span> (!bp.postProcessAfterInstantiation(bw.getWrappedInstance(), beanName)) {<\/span><\/code><code><span class=\"code-snippet_outer\">          <span class=\"code-snippet__keyword\">return<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">      }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><\/pre>\n<\/section>\n<p><br  \/><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(0, 0, 0);text-align: center;line-height: 1.5;\"><span style=\"color: rgb(62, 62, 62);line-height: 25.6px;min-height: 1em;\"><span style=\"font-size: 20px;\"><span style=\"color: rgb(137, 137, 137);line-height: 1.5;\"><span style=\"color: rgb(62, 62, 62);font-family: PingfangSC-Ultralight, sans-serif;\"><strong style=\"color:rgb(32, 91, 195);\">\/ <\/strong>\u603b\u7ed3<strong style=\"color:rgb(32, 91, 195);\"> \/<\/strong><\/span><\/span><\/span><\/span><\/p>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u6df1\u5165\u63a2\u8ba8\u4e86 Spring \u6846\u67b6\u4e2d Bean \u7684\u5b9e\u4f8b\u5316\u8fc7\u7a0b\uff0c\u5173\u4e8e\u67d0\u4e9b\u7ec6\u8282\u4ee5\u540e\u6211\u4f1a\u5355\u72ec\u62ff\u51fa\u4e00\u7bc7\u6587\u7ae0\u5355\u72ec\u8bb2\u89e3\uff0c\u6211\u4eec\u6765\u603b\u7ed3\u4e0b\u5b9e\u4f8b\u5316\u90fd\u505a\u4e86\u54ea\u4e9b\u4e8b\u60c5\uff1a<\/span><\/p>\n<blockquote label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"line-height: 25.6px;white-space: normal;border-left-width: 5px;border-left-color: rgb(77, 124, 207);margin-left: 32px;margin-right: 30px;\">\n<ol label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" class=\"list-paddingleft-1\" style=\"width: 515.844px;color: rgb(77, 124, 207);line-height: 25.6px;font-family: PingfangSC-LIGHT, sans-serif;\">\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u5148\u4ece bean \u5b9a\u4e49\u4e2d\u52a0\u8f7d\u5f53\u524d\u7c7b\uff0c\u56e0\u4e3a\u6700\u521d Spring \u4f7f\u7528 ASM \u6280\u672f\u89e3\u6790\u5143\u6570\u636e\u65f6\u53ea\u83b7\u53d6\u4e86\u5f53\u524d\u7c7b\u7684\u540d\u79f0<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u5bfb\u627e\u6240\u6709 InstantiationAwareBeanPostProcessors \u5b9e\u73b0\u7c7b\uff0c\u5e76\u8c03\u7528\u5b9e\u4f8b\u5316\u524d\u7684\u65b9\u6cd5 postProcessBeforeInstantiation<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u8fdb\u884c\u5b9e\u4f8b\u5316\uff0c\u8fd9\u91cc\u4f1a\u4f7f\u7528\u6784\u9020\u65b9\u6cd5\u8fdb\u884c\u5b9e\u4f8b\u5316<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u8c03\u7528 applyMergedBeanDefinitionPostProcessors \u627e\u5230\u6240\u6709 MergedBeanDefinitionPostProcessors \u7684\u5b9e\u73b0\u7c7b\uff0c\u6bd4\u5982\u6211\u4eec\u7684\u6ce8\u5165\u70b9\uff08@Autowired \u7b49\uff09<\/span><\/p>\n<\/li>\n<li>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 5px;white-space: pre-wrap;line-height: 1.5;\"><span style=\"line-height: 30px;color: rgb(84, 84, 84);\">\u5bfb\u627e\u6240\u6709 InstantiationAwareBeanPostProcessors \u5b9e\u73b0\u7c7b\uff0c\u5e76\u8c03\u7528\u5b9e\u4f8b\u5316\u540e\u7684\u65b9\u6cd5 postProcessAfterInstantiation<\/span><\/p>\n<\/li>\n<\/ol>\n<\/blockquote>\n<p label=\"Converted by KNB Formatter from Jason Ng https:\/\/knb.im\/mp\" style=\"margin: 20px;white-space: pre-wrap;color: rgb(43, 43, 43);line-height: 1.5;\"><span style=\"line-height: 28px;letter-spacing: 1px;font-size: 15px;font-family: PingfangSC-LIGHT, sans-serif;\">\u901a\u8fc7\u672c\u6587\u7684\u5b66\u4e60\uff0c\u8bfb\u8005\u5c06\u80fd\u591f\u66f4\u6df1\u5165\u5730\u4e86\u89e3 Spring \u6846\u67b6\u4e2d Bean \u7684\u5b9e\u4f8b\u5316\u8fc7\u7a0b\uff0c\u4e3a\u540e\u7eed\u7684\u5b66\u4e60\u548c\u5b9e\u8df5\u6253\u4e0b\u575a\u5b9e\u7684\u57fa\u7840\u3002\u4e0b\u4e00\u7bc7\u6587\u7ae0\uff0c\u6211\u4eec\u5c06\u6df1\u5165\u63a2\u8ba8 Bean \u7684\u521d\u59cb\u5316\u8fc7\u7a0b\u3002<\/span><\/p>\n<section class=\"mp_profile_iframe_wrp\"><mp-common-profile class=\"js_uneditable custom_select_card mp_profile_iframe\" data-pluginname=\"mpprofile\" data-weui-theme=\"light\" data-id=\"MzUyNTE4MTY2Mw==\" data-headimg=\"http:\/\/mmbiz.qpic.cn\/mmbiz_png\/cjE6VxWuSEEkjhu2aCCVelz7EibaQriaJCpK36qK0QqjyLiatWJDjeGKu3vam4TOYDibbNHCIlH8snt1MwGYyIYnFQ\/0?wx_fmt=png\" data-nickname=\"JAVA \u5f00\u53d1\u5fae\u6307\u5357\" data-alias=\"javaDev8848\" data-signature=\"\u4ece\u6e90\u7801\u5e95\u5c42\u5f00\u59cb\u5256\u6790\uff0c\u4e86\u89e3\u4e00\u4e2a\u77e5\u8bc6\u70b9\u7684\u4f5c\u7528\u4ee5\u53ca\u5206\u6790\u5de5\u4f5c\u53ca\u9762\u8bd5\u4e2d\u5e38\u7528\u7684\u6280\u672f\" data-from=\"0\" data-is_biz_ban=\"0\"><\/mp-common-profile><br  \/><\/section>\n<p style=\"display: none;\"><mp-style-type data-value=\"3\"><\/mp-style-type><\/p>\n<blockquote>\n<p>\u672c\u7bc7\u6587\u7ae0\u6765\u6e90\u4e8e\u5fae\u4fe1\u516c\u4f17\u53f7:                 JAVA \u5f00\u53d1\u5fae\u6307\u5357              <\/p>\n<\/blockquote>\n<\/div>\n","raw":"","protected":false},"excerpt":{"rendered":"<p>JAVA \u5f00\u53d1\u5fae\u6307\u5357 \u8bfb\u5b8c\u9700\u8981 34 \u5206\u949f \u901f\u8bfb\u4ec5\u9700 12 \u5206\u949f \/ \u524d\u8a00 \/ \u5728\u4e4b\u524d\u7684\u6587\u7ae0\u4e2d\uff0c\u6211\u4eec\u4ecb\u7ecd\u4e86 Bean \u7684\u6838\u5fc3\u6982\u5ff5\u3001 &#8230;<\/p>\n","protected":false},"author":2,"featured_media":760,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"emotion":"","emotion_color":"","title_style":"","license":"","footnotes":""},"categories":[7],"tags":[],"class_list":["post-762","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-spring-boot"],"post_thumbnail_image":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020004184-150x150.jpeg","content_first_image":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020005385.gif","post_medium_image_300":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020004184-300x127.jpeg","post_thumbnail_image_624":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020004184.jpeg","post_frist_image":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020005385.gif","post_medium_image":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020004184-300x127.jpeg","post_large_image":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020004184.jpeg","post_full_image":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020004184.jpeg","post_all_images":[{"imagesurl":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020005385.gif","id":"image0"},{"imagesurl":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230528020005385.gif","id":"image1"}],"videoAdId":"","listAd":"0","listAdId":"","listAdEvery":6,"total_comments":0,"category_name":"Spring Boot","post_date":"2023-05-27","like_count":"0","praiseWord":"\u9f13\u52b1","copyright_state":"","excitationAd":"0","rewardedVideoAdId":"","detailAdId":"","detailAd":"0","enterpriseMinapp":"0","audios":[],"postImageUrl":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230519082947553.jpg","avatarurls":[],"related_posts":null,"pageviews":831,"next_post_id":715,"next_post_title":"Spring @DependsOn\u6ce8\u89e3\u89e3\u6790","previous_post_id":853,"previous_post_title":"Spring \u2469 AOP \u521b\u5efa\u4ee3\u7406\u5bf9\u8c61\u8be6\u89e3","_links":{"self":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/posts\/762","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/comments?post=762"}],"version-history":[{"count":0,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/posts\/762\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/media\/760"}],"wp:attachment":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/media?parent=762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/categories?post=762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/tags?post=762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}