1import{_ as n,f as s}from"./app.06d697e7.js";const a={},p=s(`<h1 id="\u4EE3\u7406\u6A21\u5F0F" tabindex="-1"><a class="header-anchor" href="#\u4EE3\u7406\u6A21\u5F0F" aria-hidden="true">#</a> \u4EE3\u7406\u6A21\u5F0F</h1><h2 id="_1-1-\u57FA\u672C\u4ECB\u7ECD" tabindex="-1"><a class="header-anchor" href="#_1-1-\u57FA\u672C\u4ECB\u7ECD" aria-hidden="true">#</a> 1.1 \u57FA\u672C\u4ECB\u7ECD</h2><ol><li><p>\u4EE3\u7406\u6A21\u5F0F\uFF1A\u4E3A\u4E00\u4E2A\u5BF9\u8C61\u63D0\u4F9B\u4E00\u4E2A\u66FF\u8EAB\uFF0C\u4EE5\u63A7\u5236\u5BF9\u8FD9\u4E2A\u5BF9\u8C61\u7684\u8BBF\u95EE\uFF0C\u5373\u901A\u8FC7\u4EE3\u7406\u5BF9\u8C61\u8BBF\u95EE\u76EE\u6807\u5BF9\u8C61\u3002\u8FD9\u6837\u505A\u7684\u597D\u5904\u662F\uFF1A\u53EF\u4EE5\u5728\u76EE\u6807\u5BF9\u8C61\u5B9E\u73B0\u7684\u57FA\u7840\u4E0A\uFF0C\u589E\u5F3A\u989D\u5916\u7684\u529F\u80FD\u64CD\u4F5C\uFF0C\u5373\u6269\u5C55\u76EE\u6807\u5BF9\u8C61\u7684\u529F\u80FD\u3002</p></li><li><p>\u88AB\u4EE3\u7406\u7684\u5BF9\u8C61\u53EF\u4EE5\u662F\u8FDC\u7A0B\u5BF9\u8C61\u3001\u521B\u5EFA\u5F00\u9500\u5927\u7684\u5BF9\u8C61\u6216\u9700\u8981\u5B89\u5168\u63A7\u5236\u7684\u5BF9\u8C61\u3002</p></li><li><p>\u4EE3\u7406\u6A21\u5F0F\u6709\u4E0D\u540C\u7684\u5F62\u5F0F\uFF0C\u4E3B\u8981\u6709\u4E09\u79CD \u9759\u6001\u4EE3\u7406\u3001\u52A8\u6001\u4EE3\u7406 (JDK\u4EE3\u7406\u3001\u63A5\u53E3\u4EE3\u7406)\u548C Cglib \u4EE3\u7406 (\u53EF\u4EE5\u5728\u5185\u5B58\u52A8\u6001\u7684\u521B\u5EFA\u5BF9\u8C61\uFF0C\u800C\u4E0D\u9700\u8981\u5B9E\u73B0\u63A5\u53E3\uFF0C \u4ED6\u662F\u5C5E\u4E8E\u52A8\u6001\u4EE3\u7406\u7684\u8303\u7574) \u3002</p></li><li><p>\u4EE3\u7406\u6A21\u5F0F\u793A\u610F\u56FE</p><p><img src="https://chen-coding.oss-cn-shenzhen.aliyuncs.com/rearend/designPattern/proxy_start/image-20220623102116214.png?versionId=CAEQLBiBgMCVh566jBgiIDc0Y2EzYzE1NWE1MDQ2N2FiZTdkMDFiNjI5YWM4OWEw" alt="image-20220623102116214" loading="lazy"></p></li></ol><h2 id="_1-2-\u9759\u6001\u4EE3\u7406" tabindex="-1"><a class="header-anchor" href="#_1-2-\u9759\u6001\u4EE3\u7406" aria-hidden="true">#</a> 1.2 \u9759\u6001\u4EE3\u7406</h2><h3 id="_1-2-1-\u57FA\u672C\u4ECB\u7ECD" tabindex="-1"><a class="header-anchor" href="#_1-2-1-\u57FA\u672C\u4ECB\u7ECD" aria-hidden="true">#</a> 1.2.1 \u57FA\u672C\u4ECB\u7ECD</h3><p>\u9759\u6001\u4EE3\u7406\u5728\u4F7F\u7528\u65F6\uFF0C\u9700\u8981\u5B9A\u4E49\u63A5\u53E3\u6216\u8005\u7236\u7C7B\uFF0C\u88AB\u4EE3\u7406\u5BF9\u8C61(\u5373\u76EE\u6807\u5BF9\u8C61)\u4E0E\u4EE3\u7406\u5BF9\u8C61\u4E00\u8D77\u5B9E\u73B0\u76F8\u540C\u7684\u63A5\u53E3\u6216\u8005\u662F\u7EE7\u627F\u76F8\u540C\u7236\u7C7B\u3002</p><h3 id="_1-2-2-\u5E94\u7528\u5B9E\u4F8B" tabindex="-1"><a class="header-anchor" href="#_1-2-2-\u5E94\u7528\u5B9E\u4F8B" aria-hidden="true">#</a> 1.2.2 \u5E94\u7528\u5B9E\u4F8B</h3><p>\u601D\u8DEF\u5206\u6790\u56FE\u89E3(\u7C7B\u56FE)</p><p><img src="https://chen-coding.oss-cn-shenzhen.aliyuncs.com/rearend/designPattern/proxy_start/image-20220623102306481.png?versionId=CAEQLBiBgMD.6p66jBgiIGRlNzZhYTJkMTQzZDRjNDVhNWFiNjU1OWQwMmU5ODFm" alt="image-20220623102306481" loading="lazy"></p><p>\u4EE3\u7801\u5B9E\u73B0</p><ol><li><p>\u521B\u5EFA <code>ITeachService</code> \u63A5\u53E3</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">ITeachService</span> <span class="token punctuation">{</span> 2 3 <span class="token doc-comment comment">/** 4 * \u6559\u5B66\u65B9\u6CD5 5 */</span> 6 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">teach</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 7<span class="token punctuation">}</span> 8</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div></li><li><p>\u521B\u5EFA <code>TeachService</code> \u5B9E\u73B0\u7C7B</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">TeachService</span> <span class="token keyword">implements</span> <span class="token class-name">ITeachService</span><span class="token punctuation">{</span> 9 <span class="token annotation punctuation">
9@Override</span> 10 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">teach</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 11 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u5F00\u59CB\u4E0A\u8BFE... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 12 <span class="token punctuation">}</span> 13<span class="token punctuation">}</span> 14</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div></li><li><p>\u521B\u5EFA <code>TeachServiceProxy</code> \u4EE3\u7406\u7C7B</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">TeachServiceProxy</span> <span class="token keyword">implements</span> <span class="token class-name">ITeachService</span><span class="token punctuation">{</span> 15 16 <span class="token keyword">private</span> <span class="token class-name">TeachService</span> teachService<span class="token punctuation">;</span> 17 18 <span class="token keyword">public</span> <span class="token class-name">TeachServiceProxy</span><span class="token punctuation">(</span><span class="token class-name">TeachService</span> teachService<span class="token punctuation">)</span> <span class="token punctuation">{</span> 19 <span class="token keyword">this</span><span class="token punctuation">.</span>teachService <span class="token operator">=</span> teachService<span class="token punctuation">;</span> 20 <span class="token punctuation">}</span> 21 22 <span class="token annotation punctuation">@Override</span> 23 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">teach</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 24 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u51C6\u5907\u4E0A\u8BFE... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 25 teachService<span class="token punctuation">.</span><span class="token function">teach</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 26 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u7ED3\u675F\u4E0A\u8BFE... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 27 <span class="token punctuation">}</span> 28<span class="token punctuation">}</span> 29</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br></div></div></li><li><p>\u521B\u5EFA\u5BA2\u6237\u7AEF\u8C03\u7528</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Client</span> <span class="token punctuation">{</span> 30 31 <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>
32 <span class="token class-name">TeachServiceProxy</span> teachServiceProxy <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TeachServiceProxy</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">TeachService</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 33 teachServiceProxy<span class="token punctuation">.</span><span class="token function">teach</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 34 35 <span class="token comment">// \u8F93\u51FA</span> 36 <span class="token comment">// \u51C6\u5907\u4E0A\u8BFE...</span> 37 <span class="token comment">// \u5F00\u59CB\u4E0A\u8BFE...</span> 38 <span class="token comment">// \u7ED3\u675F\u4E0A\u8BFE...</span> 39 40 <span class="token punctuation">}</span> 41<span class="token punctuation">}</span> 42</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div></li></ol><h3 id="_1-2-3-\u9759\u6001\u4EE3\u7406\u4F18\u7F3A\u70B9" tabindex="-1"><a class="header-anchor" href="#_1-2-3-\u9759\u6001\u4EE3\u7406\u4F18\u7F3A\u70B9" aria-hidden="true">#</a> 1.2.3 \u9759\u6001\u4EE3\u7406\u4F18\u7F3A\u70B9</h3><ol><li><p>\u4F18\u70B9\uFF1A\u5728\u4E0D\u4FEE\u6539\u76EE\u6807\u5BF9\u8C61\u7684\u529F\u80FD\u524D\u63D0\u4E0B\uFF0C\u80FD\u901A\u8FC7\u4EE3\u7406\u5BF9\u8C61\u5BF9\u76EE\u6807\u529F\u80FD\u6269\u5C55\u3002</p></li><li><p>\u7F3A\u70B9\uFF1A\u56E0\u4E3A\u4EE3\u7406\u5BF9\u8C61\u9700\u8981\u4E0E\u76EE\u6807\u5BF9\u8C61\u5B9E\u73B0\u4E00\u6837\u7684\u63A5\u53E3\uFF0C\u6240\u4EE5\u4F1A\u6709\u5F88\u591A\u4EE3\u7406\u7C7B\u3002</p></li><li><p>\u4E00\u65E6\u63A5\u53E3\u589E\u52A0\u65B9\u6CD5\uFF0C\u76EE\u6807\u5BF9\u8C61\u4E0E\u4EE3\u7406\u5BF9\u8C61\u90FD\u8981\u7EF4\u62A4\u3002</p></li></ol><h2 id="_1-3-\u52A8\u6001\u4EE3\u7406" tabindex="-1"><a class="header-anchor" href="#_1-3-\u52A8\u6001\u4EE3\u7406" aria-hidden="true">#</a> 1.3 \u52A8\u6001\u4EE3\u7406</h2><h3 id="_1-3-1-\u57FA\u672C\u4ECB\u7ECD" tabindex="-1"><a class="header-anchor" href="#_1-3-1-\u57FA\u672C\u4ECB\u7ECD" aria-hidden="true">#</a> 1.3.1 \u57FA\u672C\u4ECB\u7ECD</h3><ol><li><p>\u4EE3\u7406\u5BF9\u8C61\uFF0C\u4E0D\u9700\u8981\u5B9E\u73B0\u63A5\u53E3\uFF0C\u4F46\u662F\u76EE\u6807\u5BF9\u8C61\u8981\u5B9E\u73B0\u63A5\u53E3\uFF0C\u5426\u5219\u4E0D\u80FD\u7528\u52A8\u6001\u4EE3\u7406\u3002</p></li><li><p>\u4EE3\u7406\u5BF9\u8C61\u7684\u751F\u6210\uFF0C\u662F\u5229\u7528 JDK \u7684 API\uFF0C\u52A8\u6001\u7684\u5728\u5185\u5B58\u4E2D\u6784\u5EFA\u4EE3\u7406\u5BF9\u8C61\u3002</p></li><li><p>\u52A8\u6001\u4EE3\u7406\u4E5F\u53EB\u505A\uFF1AJDK \u4EE3\u7406\u3001\u63A5\u53E3\u4EE3\u7406\u3002</p></li></ol><h3 id="_1-3-2-jdk\u4E2D\u751F\u6210\u4EE3\u7406\u5BF9\u8C61\u7684api" tabindex="-1"><a class="header-anchor" href="#_1-3-2-jdk\u4E2D\u751F\u6210\u4EE3\u7406\u5BF9\u8C61\u7684api" aria-hidden="true">#</a> 1.3.2 JDK\u4E2D\u751F\u6210\u4EE3\u7406\u5BF9\u8C61\u7684API</h3><ol><li>\u4EE3\u7406\u7C7B\u6240\u5728\u5305\uFF1A<code>java.lang.reflect.Proxy</code></li><li>JDK \u5B9E\u73B0\u4EE3\u7406\u53EA\u9700\u8981\u4F7F\u7528 <code>newProxyInstance</code> \u65B9\u6CD5,\u4F46\u662F\u8BE5\u65B9\u6CD5\u9700\u8981\u63A5\u6536\u4E09\u4E2A\u53C2\u6570,\u5B8C\u6574\u7684\u5199\u6CD5\u662F: <code>static Object newProxyInstance(ClassLoaderloader, Class<?>[]interfaces, InvocationHandlerh)</code></li></ol><h3 id="_1-3-3-\u52A8\u6001\u4EE3\u7406\u5E94\u7528\u5B9E\u4F8B" tabindex="-1"><a class="header-anchor" href="#_1-3-3-\u52A8\u6001\u4EE3\u7406\u5E94\u7528\u5B9E\u4F8B" aria-hidden="true">
42#</a> 1.3.3 \u52A8\u6001\u4EE3\u7406\u5E94\u7528\u5B9E\u4F8B</h3><p>\u5C06\u524D\u9762\u7684\u9759\u6001\u4EE3\u7406\u6539\u8FDB\u6210\u52A8\u6001\u4EE3\u7406\u6A21\u5F0F</p><p>\u601D\u8DEF\u56FE\u89E3(\u7C7B\u56FE)</p><p><img src="https://chen-coding.oss-cn-shenzhen.aliyuncs.com/rearend/designPattern/proxy_start/image-20220623103106666.png?versionId=CAEQLBiBgIDW9J.6jBgiIGE4ZmUzNjBhMzI3ODQ3ODE5MzBiMTY1NjlmZTg2MGU5" alt="image-20220623103106666" loading="lazy"></p><p>\u4EE3\u7801\u5B9E\u73B0</p><ol><li><p>\u521B\u5EFA <code>ITeachService</code> \u63A5\u53E3</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">ITeachService</span> <span class="token punctuation">{</span> 43 44 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">teach</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 45 46 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">select</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span><span class="token punctuation">;</span> 47 48 <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">answer</span><span class="token punctuation">(</span><span class="token class-name">String</span> answer<span class="token punctuation">)</span><span class="token punctuation">;</span> 49<span class="token punctuation">}</span> 50 51</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div></li><li><p>\u521B\u5EFA <code>TeachService</code> \u5B9E\u73B0\u7C7B</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">TeachService</span> <span class="token keyword">implements</span> <span class="token class-name">ITeachService</span> <span class="token punctuation">{</span> 52 <span class="token annotation punctuation">@Override</span> 53 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">teach</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 54 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u5F00\u59CB\u4E0A\u8BFE... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 55 <span class="token punctuation">}</span> 56 57 <span class="token annotation punctuation">@Override</span> 58 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">select</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span> 59 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" "</span> <span class="token operator">+</span> name <span class="token operator">+</span> <span class="token string">" \u56DE\u7B54\u95EE\u9898... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 60 <span class="token punctuation">}</span> 61 62 <span class="token annotation punctuation">
62@Override</span> 63 <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">answer</span><span class="token punctuation">(</span><span class="token class-name">String</span> answer<span class="token punctuation">)</span> <span class="token punctuation">{</span> 64 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u7B54\u6848\u662F... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 65 <span class="token keyword">return</span> answer<span class="token punctuation">;</span> 66 <span class="token punctuation">}</span> 67<span class="token punctuation">}</span> 68</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br></div></div></li><li><p>\u521B\u5EFA <code>TeachServiceProxy</code> \u4EE3\u7406\u7C7B</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">TeachServiceProxy</span> <span class="token punctuation">{</span> 69 70 <span class="token comment">// \u8981\u4EE3\u7406\u7684\u5BF9\u8C61</span> 71 <span class="token keyword">private</span> <span class="token class-name">Object</span> target<span class="token punctuation">;</span> 72 73 <span class="token comment">// \u6784\u9020\u65B9\u6CD5</span> 74 <span class="token keyword">public</span> <span class="token class-name">TeachServiceProxy</span><span class="token punctuation">(</span><span class="token class-name">Object</span> target<span class="token punctuation">)</span> <span class="token punctuation">{</span> 75 <span class="token keyword">this</span><span class="token punctuation">.</span>target <span class="token operator">=</span> target<span class="token punctuation">;</span> 76 <span class="token punctuation">}</span> 77 78 <span class="token comment">// \u83B7\u53D6\u4EE3\u7406\u5BF9\u8C61</span> 79 <span class="token keyword">public</span> <span class="token class-name">Object</span> <span class="token function">getProxyInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 80 <span class="token doc-comment comment">/** 81 * public static Object newProxyInstance(ClassLoader loader, Class<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>?</span><span class="token punctuation">></span></span>[] interfaces, InvocationHandler h) 82 * 1.ClassLoader loader:\u6307\u5B9A\u5F53\u524D\u76EE\u6807\u5BF9\u8C61\u4F7F\u7528\u7684\u7C7B\u52A0\u8F7D\u5668\uFF0C\u83B7\u53D6\u52A0\u8F7D\u5668\u7684\u65B9\u6CD5\u56FA\u5B9A 83 * 2.Class<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>?</span><span class="token punctuation">></span></span>[] interfaces:\u76EE\u6807\u5BF9\u8C61\u5B9E\u73B0\u7684\u63A5\u53E3\uFF0C\u4F7F\u7528\u6CDB\u578B\u65B9\u6CD5\u786E\u8BA4\u7C7B\u578B 84 * 3.InvocationHandler h:\u4E8B\u4EF6\u5904\u7406\uFF0C\u6267\u884C\u76EE\u6807\u5BF9\u8C61\u7684\u65B9\u6CD5\u65F6\uFF0C\u4F1A\u89E6\u53D1\u5F53\u524D\u4E8B\u4EF6\u5904\u7406\u5668\u65B9\u6CD5\uFF0C\u4F1A\u628A\u5F53\u524D\u6267\u884C\u7684\u76EE\u6807\u5BF9\u8C61\u7684\u65B9\u6CD5\u4F5C\u4E3A\u53C2\u6570\u4F20\u5165 85 */</span>
86 <span class="token keyword">return</span> <span class="token class-name">Proxy</span><span class="token punctuation">.</span><span class="token function">newProxyInstance</span><span class="token punctuation">(</span>target<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getClassLoader</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> target<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getInterfaces</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">InvocationHandler</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 87 <span class="token annotation punctuation">@Override</span> 88 <span class="token keyword">public</span> <span class="token class-name">Object</span> <span class="token function">invoke</span><span class="token punctuation">(</span><span class="token class-name">Object</span> proxy<span class="token punctuation">,</span> <span class="token class-name">Method</span> method<span class="token punctuation">,</span> <span class="token class-name">Object</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Throwable</span> <span class="token punctuation">{</span> 89 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u5F00\u59CB\u4F7F\u7528 JDK \u4EE3\u7406..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 90 <span class="token comment">// \u53CD\u5C04\u673A\u5236\u8C03\u7528\u76EE\u6807\u5BF9\u8C61\u7684\u65B9\u6CD5</span> 91 <span class="token class-name">Object</span> invoke <span class="token operator">=</span> method<span class="token punctuation">.</span><span class="token function">invoke</span><span class="token punctuation">(</span>target<span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> 92 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u7ED3\u675F\u4F7F\u7528 JDK \u4EE3\u7406... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 93 <span class="token keyword">return</span> invoke<span class="token punctuation">;</span> 94 <span class="token punctuation">}</span> 95 <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 96 <span class="token punctuation">}</span> 97<span class="token punctuation">}</span> 98</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br></div></div></li><li><p>\u521B\u5EFA\u5BA2\u6237\u7AEF\u8C03\u7528</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Client</span> <span class="token punctuation">{</span> 99 100 <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span> 101
102 <span class="token comment">// \u521B\u5EFA\u76EE\u6807\u5BF9\u8C61</span> 103 <span class="token class-name">TeachService</span> teachService <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TeachService</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 104 <span class="token comment">// \u521B\u5EFA\u4EE3\u7406\u7C7B</span> 105 <span class="token class-name">TeachServiceProxy</span> teachServiceProxy <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TeachServiceProxy</span><span class="token punctuation">(</span>teachService<span class="token punctuation">)</span><span class="token punctuation">;</span> 106 <span class="token comment">// \u83B7\u53D6\u4EE3\u7406\u5BF9\u8C61</span> 107 <span class="token class-name">ITeachService</span> instance <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">ITeachService</span><span class="token punctuation">)</span> teachServiceProxy<span class="token punctuation">.</span><span class="token function">getProxyInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 108 <span class="token comment">// \u8C03\u7528\u65B9\u6CD5</span> 109 instance<span class="token punctuation">.</span><span class="token function">teach</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 110 instance<span class="token punctuation">.</span><span class="token function">select</span><span class="token punctuation">(</span><span class="token string">"Tom"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 111 <span class="token class-name">String</span> answer <span class="token operator">=</span> instance<span class="token punctuation">.</span><span class="token function">answer</span><span class="token punctuation">(</span><span class="token string">"Java is best language"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 112 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" answer = "</span> <span class="token operator">+</span> answer<span class="token punctuation">)</span><span class="token punctuation">;</span> 113 114 <span class="token comment">// \u8F93\u51FA</span> 115 <span class="token comment">// \u5F00\u59CB\u4F7F\u7528 JDK \u4EE3\u7406...</span> 116 <span class="token comment">// \u5F00\u59CB\u4E0A\u8BFE...</span> 117 <span class="token comment">// \u7ED3\u675F\u4F7F\u7528 JDK \u4EE3\u7406...</span> 118 <span class="token comment">// \u5F00\u59CB\u4F7F\u7528 JDK \u4EE3\u7406...</span> 119 <span class="token comment">// Tom \u56DE\u7B54\u95EE\u9898...</span> 120 <span class="token comment">// \u7ED3\u675F\u4F7F\u7528 JDK \u4EE3\u7406...</span> 121 <span class="token comment">// \u5F00\u59CB\u4F7F\u7528 JDK \u4EE3\u7406...</span> 122 <span class="token comment">// \u7B54\u6848\u662F...</span> 123 <span class="token comment">// \u7ED3\u675F\u4F7F\u7528 JDK \u4EE3\u7406...</span> 124 <span class="token comment">// answer = Java is best language</span> 125 <span class="token punctuation">}</span> 126<span class="token punctuation">}</span> 127</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br></div></div></li></ol><h2 id="_1-4-cglib-\u4EE3\u7406" tabindex="-1"><a class="header-anchor" href="#_1-4-cglib-\u4EE3\u7406" aria-hidden="true">
127#</a> 1.4 Cglib \u4EE3\u7406</h2><h3 id="_1-4-1-\u57FA\u672C\u4ECB\u7ECD" tabindex="-1"><a class="header-anchor" href="#_1-4-1-\u57FA\u672C\u4ECB\u7ECD" aria-hidden="true">#</a> 1.4.1 \u57FA\u672C\u4ECB\u7ECD</h3><ol><li>\u9759\u6001\u4EE3\u7406\u548C JDK \u4EE3\u7406\u6A21\u5F0F\u90FD\u8981\u6C42\u76EE\u6807\u5BF9\u8C61\u5B9E\u73B0\u4E00\u4E2A\u63A5\u53E3\uFF0C\u4F46\u662F\u6709\u65F6\u5019\u76EE\u6807\u5BF9\u8C61\u53EA\u662F\u4E00\u4E2A\u5355\u72EC\u7684\u5BF9\u8C61\uFF0C\u5E76\u6CA1\u6709\u5B9E\u73B0\u4EFB\u4F55\u7684\u63A5\u53E3\uFF0C\u8FD9\u4E2A\u65F6\u5019\u53EF\u4F7F\u7528\u76EE\u6807\u5BF9\u8C61\u5B50\u7C7B\u6765\u5B9E\u73B0\u4EE3\u7406\uFF0C\u8FD9\u5C31\u662F Cglib \u4EE3\u7406\u3002</li><li>Cglib \u4EE3\u7406\u4E5F\u53EB\u4F5C<strong>\u5B50\u7C7B\u4EE3\u7406</strong>\uFF0C \u5B83\u662F\u5728\u5185\u5B58\u4E2D\u6784\u5EFA\u4E00\u4E2A\u5B50\u7C7B\u5BF9\u8C61\u4ECE\u800C\u5B9E\u73B0\u5BF9\u76EE\u6807\u5BF9\u8C61\u529F\u80FD\u6269\u5C55\uFF0C\u6709\u4E9B\u4E66\u4E5F\u5C06 Cglib \u4EE3\u7406\u5F52\u5C5E\u5230\u52A8\u6001\u4EE3\u7406\u3002</li><li>Cglib \u662F\u4E00\u4E2A\u5F3A\u5927\u7684\u9AD8\u6027\u80FD\u7684\u4EE3\u7801\u751F\u6210\u5305\uFF0C\u5B83\u53EF\u4EE5\u5728\u8FD0\u884C\u671F\u6269\u5C55 Java \u7C7B\u4E0E\u5B9E\u73B0 Java \u63A5\u53E3\u3002\u5B83\u5E7F\u6CDB\u7684\u88AB\u8BB8\u591A AOP \u7684\u6846\u67B6\u4F7F\u7528\uFF0C\u4F8B\u5982 SpringAOP\uFF0C\u5B9E\u73B0\u65B9\u6CD5\u62E6\u622A\u3002</li><li>\u5728AOP\u7F16\u7A0B\u4E2D\u5982\u4F55\u9009\u62E9\u4EE3\u7406\u6A21\u5F0F\uFF1A <ul><li>\u76EE\u6807\u5BF9\u8C61\u9700\u8981\u5B9E\u73B0\u63A5\u53E3\uFF0C\u7528 JDK \u4EE3\u7406</li><li>\u76EE\u6807\u5BF9\u8C61\u4E0D\u9700\u8981\u5B9E\u73B0\u63A5\u53E3\uFF0C\u7528 Cglib \u4EE3\u7406</li></ul></li><li>Cglib \u5305\u7684\u5E95\u5C42\u662F\u901A\u8FC7\u4F7F\u7528\u5B57\u8282\u7801\u5904\u7406\u6846\u67B6 ASM \u6765\u8F6C\u6362\u5B57\u8282\u7801\u5E76\u751F\u6210\u65B0\u7684\u7C7B\u3002</li></ol><h3 id="_1-4-2-\u5B9E\u73B0\u6B65\u9AA4" tabindex="-1"><a class="header-anchor" href="#_1-4-2-\u5B9E\u73B0\u6B65\u9AA4" aria-hidden="true">#</a> 1.4.2 \u5B9E\u73B0\u6B65\u9AA4</h3><ol><li><p>\u9700\u8981\u5F15\u5165Cglib \u7684 Jar \u5305</p><div class="language-xml ext-xml line-numbers-mode"><pre class="language-xml"><code><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> 128 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>cglib<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> 129 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>cglib<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> 130 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>2.2.2<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> 131<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> 132 133<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> 134 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>asm<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> 135 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>asm<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> 136 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>3.2<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> 137<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> 138 139<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> 140 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>asm<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> 141 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>asm-commons<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> 142 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>3.2<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> 143<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> 144 145<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> 146 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>asm<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> 147 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>asm-tree<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> 148 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>3.2<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> 149<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> 150</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br></div></div></li><li><p>\u5728\u5185\u5B58\u4E2D\u52A8\u6001\u6784\u5EFA\u5B50\u7C7B\uFF0C\u6CE8\u610F\u4EE3\u7406\u7684\u7C7B\u4E0D\u80FD\u4E3A <code>final</code>\uFF0C\u5426\u5219\u62A5\u9519 <code>java.lang.IllegalArgumentException</code> .</p></li><li><p>\u76EE\u6807\u5BF9\u8C61\u7684\u65B9\u6CD5\u5982\u679C\u4E3A final/static \uFF0C\u90A3\u4E48\u5C31\u4E0D\u4F1A\u88AB\u62E6\u622A\uFF0C\u5373\u4E0D\u4F1A\u
1506267\u884C\u76EE\u6807\u5BF9\u8C61\u989D\u5916\u7684\u4E1A\u52A1\u65B9\u6CD5\u3002</p></li></ol><h3 id="_1-4-3-\u5E94\u7528\u5B9E\u4F8B" tabindex="-1"><a class="header-anchor" href="#_1-4-3-\u5E94\u7528\u5B9E\u4F8B" aria-hidden="true">#</a> 1.4.3 \u5E94\u7528\u5B9E\u4F8B</h3><p>\u5C06\u524D\u9762\u7684\u6848\u4F8B\u7528Cglib\u4EE3\u7406\u6A21\u5F0F\u5B9E\u73B0</p><p>\u601D\u8DEF\u56FE\u89E3(\u7C7B\u56FE)</p><p><img src="https://chen-coding.oss-cn-shenzhen.aliyuncs.com/rearend/designPattern/proxy_start/image-20220623103838856.png?versionId=CAEQLBiBgIDG_qC6jBgiIDdkNWQ0NzYzOGQ1NDRiNmJhN2U5MjIwM2U4OTEzOTky" alt="image-20220623103838856" loading="lazy"></p><p>\u4EE3\u7801\u5B9E\u73B0</p><ol><li><p>\u521B\u5EFA <code>TeachService</code> \u7C7B</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">TeachService</span> <span class="token punctuation">{</span> 151 152 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">teach</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 153 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u5F00\u59CB\u4E0A\u8BFE... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 154 <span class="token punctuation">}</span> 155 156 <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">select</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span> 157 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" "</span> <span class="token operator">+</span> name <span class="token operator">+</span> <span class="token string">" \u56DE\u7B54\u95EE\u9898... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 158 <span class="token punctuation">}</span> 159 160 <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">answer</span><span class="token punctuation">(</span><span class="token class-name">String</span> answer<span class="token punctuation">)</span> <span class="token punctuation">{</span> 161 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u7B54\u6848\u662F... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 162 <span class="token keyword">return</span> answer<span class="token punctuation">;</span> 163 <span class="token punctuation">}</span> 164 165<span class="token punctuation">}</span> 166</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br></div></div></li><li><p>\u521B\u5EFA <code>TeachServiceProxy</code> \u4EE3\u7406\u7C7B</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">TeachServiceProxy</span> <span class="token keyword">implements</span> <span class="token class-name">
166MethodInterceptor</span> <span class="token punctuation">{</span> 167 168 <span class="token comment">// \u76EE\u6807\u5BF9\u8C61</span> 169 <span class="token keyword">private</span> <span class="token class-name">Object</span> target<span class="token punctuation">;</span> 170 171 <span class="token comment">// \u6784\u9020\u5668</span> 172 <span class="token keyword">public</span> <span class="token class-name">TeachServiceProxy</span><span class="token punctuation">(</span><span class="token class-name">Object</span> target<span class="token punctuation">)</span> <span class="token punctuation">{</span> 173 <span class="token keyword">this</span><span class="token punctuation">.</span>target <span class="token operator">=</span> target<span class="token punctuation">;</span> 174 <span class="token punctuation">}</span> 175 176 <span class="token comment">// \u521B\u5EFA\u4E00\u4E2A \u4EE3\u7406\u5BF9\u8C61</span> 177 <span class="token keyword">public</span> <span class="token class-name">Object</span> <span class="token function">getProxyInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 178 <span class="token comment">// 1.\u521B\u5EFA\u5DE5\u5177\u7C7B</span> 179 <span class="token class-name">Enhancer</span> enhancer <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Enhancer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 180 <span class="token comment">// 2.\u8BBE\u7F6E\u7236\u7C7B</span> 181 enhancer<span class="token punctuation">.</span><span class="token function">setSuperclass</span><span class="token punctuation">(</span>target<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 182 <span class="token comment">// 3.\u8BBE\u7F6E\u56DE\u8C03\u51FD\u6570</span> 183 enhancer<span class="token punctuation">.</span><span class="token function">setCallback</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 184 <span class="token comment">// 4.\u521B\u5EFA\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5373\u4EE3\u7406\u5BF9\u8C61</span> 185 <span class="token keyword">return</span> enhancer<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 186 <span class="token punctuation">}</span> 187 188 <span class="token comment">// \u91CD\u5199 intercept \u65B9\u6CD5\uFF0C\u4F1A\u8C03\u7528\u76EE\u6807\u5BF9\u8C61\u7684\u65B9\u6CD5</span> 189 <span class="token annotation punctuation">@Override</span> 190 <span class="token keyword">public</span> <span class="token class-name">Object</span> <span class="token function">intercept</span><span class="token punctuation">(</span><span class="token class-name">Object</span> o<span class="token punctuation">,</span> <span class="token class-name">Method</span> method<span class="token punctuation">,</span> <span class="token class-name">Object</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">,</span> <span class="token class-name">MethodProxy</span> methodProxy<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Throwable</span> <span class="token punctuation">{</span> 191 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u5F00\u59CB cglib \u4EE3\u7406... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
192 <span class="token class-name">Object</span> invoke <span class="token operator">=</span> method<span class="token punctuation">.</span><span class="token function">invoke</span><span class="token punctuation">(</span>target<span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> 193 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" \u7ED3\u675F cglib \u4EE3\u7406... "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 194 <span class="token keyword">return</span> invoke<span class="token punctuation">;</span> 195 <span class="token punctuation">}</span> 196<span class="token punctuation">}</span> 197</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br></div></div></li><li><p>\u521B\u5EFA\u5BA2\u6237\u7AEF\u8C03\u7528</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Client</span> <span class="token punctuation">{</span> 198 199 <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span> 200 201 <span class="token comment">// \u521B\u5EFA\u76EE\u6807\u5BF9\u8C61</span> 202 <span class="token class-name">TeachService</span> teachService <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TeachService</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 203 <span class="token comment">// \u521B\u5EFA\u4EE3\u7406\u7C7B</span> 204 <span class="token class-name">TeachServiceProxy</span> teachServiceProxy <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TeachServiceProxy</span><span class="token punctuation">(</span>teachService<span class="token punctuation">)</span><span class="token punctuation">;</span> 205 <span class="token comment">// \u83B7\u53D6\u4EE3\u7406\u5BF9\u8C61</span> 206 <span class="token class-name">TeachService</span> instance <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">TeachService</span><span class="token punctuation">)</span> teachServiceProxy<span class="token punctuation">.</span><span class="token function">getProxyInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
207 <span class="token comment">// \u8C03\u7528\u65B9\u6CD5</span> 208 instance<span class="token punctuation">.</span><span class="token function">teach</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 209 instance<span class="token punctuation">.</span><span class="token function">select</span><span class="token punctuation">(</span><span class="token string">"Tom"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 210 <span class="token class-name">String</span> answer <span class="token operator">=</span> instance<span class="token punctuation">.</span><span class="token function">answer</span><span class="token punctuation">(</span><span class="token string">"Java is best language"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 211 <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" answer = "</span> <span class="token operator">+</span> answer<span class="token punctuation">)</span><span class="token punctuation">;</span> 212 213 <span class="token comment">// \u8F93\u51FA</span> 214 <span class="token comment">// \u5F00\u59CB cglib \u4EE3\u7406...</span> 215 <span class="token comment">// \u5F00\u59CB\u4E0A\u8BFE...</span> 216 <span class="token comment">// \u7ED3\u675F cglib \u4EE3\u7406...</span> 217 <span class="token comment">// \u5F00\u59CB cglib \u4EE3\u7406...</span> 218 <span class="token comment">// Tom \u56DE\u7B54\u95EE\u9898...</span> 219 <span class="token comment">// \u7ED3\u675F cglib \u4EE3\u7406...</span> 220 <span class="token comment">// \u5F00\u59CB cglib \u4EE3\u7406...</span> 221 <span class="token comment">// \u7B54\u6848\u662F...</span> 222 <span class="token comment">// \u7ED3\u675F cglib \u4EE3\u7406...</span> 223 <span class="token comment">// answer = Java is best language</span> 224 225 <span class="token punctuation">}</span> 226<span class="token punctuation">}</span> 227</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br></div></div></li></ol><h2 id="_1-5-\u5E38\u89C1\u7684\u4EE3\u7406\u6A21\u5F0F" tabindex="-1"><a class="header-anchor" href="#_1-5-\u5E38\u89C1\u7684\u4EE3\u7406\u6A21\u5F0F" aria-hidden="true">#</a> 1.5 \u5E38\u89C1\u7684\u4EE3\u7406\u6A21\u5F0F</h2><ol><li>\u9632\u706B\u5899\u4EE3\u7406 \u5185\u7F51\u901A\u8FC7\u4EE3\u7406\u7A7F\u900F\u9632\u706B\u5899\uFF0C\u5B9E\u73B0\u5BF9\u516C\u7F51\u7684\u8BBF\u95EE\u3002</li><li>\u7F13\u5B58\u4EE3\u7406 \u6BD4\u5982\uFF1A\u5F53\u8BF7\u6C42\u56FE\u7247\u6587\u4EF6\u7B49\u8D44\u6E90\u65F6\uFF0C\u5148\u5230\u7F13\u5B58\u4EE3\u7406\u53D6\uFF0C\u5982\u679C\u53D6\u5230\u8D44\u6E90\u5219ok,\u5982\u679C\u53D6\u4E0D\u5230\u8D44\u6E90\uFF0C\u518D\u5230\u516C\u7F51\u6216\u8005\u6570\u636E\u5E93\u53D6\uFF0C\u7136\u540E\u7F13\u5B58\u3002</li><li>\u8FDC\u7A0B\u4EE3\u7406 \u8FDC\u7A0B\u5BF9\u8C61\u7684\u672C\u5730\u4EE3\u8868\uFF0C\u901A\u8FC7\u5B83\u53EF\u4EE5\u628A\u8FDC\u7A0B\u5BF9\u8C61\u5F53\u672C\u5730\u5BF9\u8C61\u6765\u8C03\u7528\u3002\u8FDC\u7A0B\u4EE3\u7406\u901A\u8FC7\u7F51\u7EDC\u548C\u771F\u6B63\u7684\u8FDC\u7A0B\u5BF9\u8C61\u6C9F\u901A\u4FE1\u606F\u3002</li><li>\u540C\u6B65\u4EE3\u7406\uFF1A\u4E3B\u8981\u4F7F\u7528\u5728\u591A\u7EBF\u7A0B\u7F16\u7A0B\u4E2D\uFF0C\u5B8C\u6210\u591A\u7EBF\u7A0B\u95F4\u540C\u6B65\u5DE5\u4F5C\u3002 \u540C\u6B65\u4EE3\u7406\uFF1A\u4E3B\u8981\u4F7F\u7528\u5728\u591A\u7EBF\u7A0B\u7F16\u7A0B\u4E2D\uFF0C\u5B8C\u6210\u591A\u7EBF\u7A0B\u95F4\u540C\u6B65\u5DE5\u4F5C\u3002</li></ol>`,37);function t(e,c){return p}var l=n(a,[["render",t],["__file","proxy_start.html.vue"]]);export{l as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.