PageSourceSearch

https://chenyl8848.github.io/assets/proxy_start.html.2fd8e262.js

js chenyl8848.github.io collected 2026-10-03 08:47:54 UTC 59,683 bytes, 227 lines download raw bytes

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">&quot; \u5F00\u59CB\u4E0A\u8BFE... &quot;</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">&quot; \u51C6\u5907\u4E0A\u8BFE... &quot;</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">&quot; \u7ED3\u675F\u4E0A\u8BFE... &quot;</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&lt;?&gt;[]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">&quot; \u5F00\u59CB\u4E0A\u8BFE... &quot;</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">&quot; &quot;</span> <span class="token operator">+</span> name <span class="token operator">+</span> <span class="token string">&quot; \u56DE\u7B54\u95EE\u9898... &quot;</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">&quot; \u7B54\u6848\u662F... &quot;</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">&lt;</span>?</span><span class="token punctuation">&gt;</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">&lt;</span>?</span><span class="token punctuation">&gt;</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">&quot; \u5F00\u59CB\u4F7F\u7528 JDK \u4EE3\u7406...&quot;</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">&quot; \u7ED3\u675F\u4F7F\u7528 JDK \u4EE3\u7406... &quot;</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">&quot;Tom&quot;</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">&quot;Java is best language&quot;</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">&quot; answer = &quot;</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">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
128    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>cglib<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
129    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>cglib<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
130    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.2.2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
131<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
132
133<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
134    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>asm<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
135    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>asm<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
136    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>3.2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
137<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
138
139<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
140    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>asm<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
141    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>asm-commons<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
142    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>3.2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
143<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
144
145<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
146    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>asm<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
147    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>asm-tree<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
148    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>3.2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
149<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</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">&quot; \u5F00\u59CB\u4E0A\u8BFE... &quot;</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">&quot; &quot;</span> <span class="token operator">+</span> name <span class="token operator">+</span> <span class="token string">&quot; \u56DE\u7B54\u95EE\u9898... &quot;</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">&quot; \u7B54\u6848\u662F... &quot;</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">&quot; \u5F00\u59CB cglib \u4EE3\u7406... &quot;</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">&quot; \u7ED3\u675F cglib \u4EE3\u7406... &quot;</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">&quot;Tom&quot;</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">&quot;Java is best language&quot;</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">&quot; answer = &quot;</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.