<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## Java專題九(2):動態代理 [TOC] #### JDK靜態代理 > 使用接口代理實現類的方法調用 定義一個接口 ~~~ public interface HelloService { void sayHello(); } ~~~ 定義一個實現類 ~~~ public class HelloServiceImpl implements HelloService{ @Override public void sayHello() { System.out.println("say hello..."); } } ~~~ 測試代理方法 ~~~ public class HelloTest { public static void main(String[] args){ HelloService hello = new HelloServiceImpl(); hello.sayHello(); } } ~~~ 輸出 ~~~ say hello... ~~~ #### JDK動態代理 - 可以隱藏委托類 - 在不修改委托類代碼的情況下,可以為委托類的方法增加一些操作,如方法中實際代碼前后增加日志輸出 > 首先通過Proxy為委托類創建代理對象,將代理對象上對方法的調用通過`InvocationHandler`分發給實際的委托類調用,只能為實現了接口的類提供代理。 定義一個接口 ~~~ public interface HelloService { void sayHello(); } ~~~ 定義一個委托類,實現接口 ~~~ public class HelloServiceImpl implements HelloService{ @Override public void sayHello() { System.out.println("say hello..."); } } ~~~ 創建代理類,必須實現`InvocationHandler`接口 ~~~ public interface InvocationHandler { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable; } ~~~ ~~~ // java.lang.reflect.Proxy public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h){ // ... } ~~~ ~~~ import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class HelloServiceProxy implements InvocationHandler { private Object target; public Object bind(Object target){ this.target = target; return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before invoked..."); Object result = method.invoke(target, args); System.out.println("before invoked..."); return result; } } ~~~ 測試代理方法 ~~~ public class HelloTest { public static void main(String[] args){ HelloServiceProxy helloServiceProxy = new HelloServiceProxy(); HelloService proxy = (HelloService) helloServiceProxy.bind(new HelloServiceImpl()); proxy.sayHello(); } } ~~~ 輸出 ~~~ before invoked... say hello... before invoked... ~~~ #### CGLIB動態代理 HelloServer.java和HelloServiceImpl.java都不用改變, ~~~ public class HelloServiceCglib implements MethodInterceptor { private Object target; public Object getInstance(Object target){ this.target = target; Enhancer enhancer = new Enhancer(); enhancer.setSuperClass(this.target.getClass()); enhancer.setCallback(this); return enhancer.setCallback(this); } @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy porxy) throws Throwable { System.out.println("before invoked..."); Object returnObj = porxy.invokeSuper(obj, args); System.out.println("before invoked..."); return returnObj ; } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看