<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] 先寫個接口 ~~~ package service; public interface UserService { void save(); void delete(); void update(); void find(); } ~~~ 再寫接口的實現類 ~~~ package service; public class UserServiceImpl implements UserService { @Override public void save() { System.out.println("保存用戶"); } @Override public void delete() { System.out.println("刪除用戶"); } @Override public void update() { System.out.println("更新用戶"); } @Override public void find() { System.out.println("查找用戶"); } } ~~~ aop實現 ~~~ package proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import service.UserService; import service.UserServiceImpl; public class UserServiceProxyFactory implements InvocationHandler { /** * 代理的目標對象 */ private Object targetObject; public UserServiceProxyFactory(Object targetObject) { super(); // 必須要這個對象,因為method.invoke要用 this.targetObject = targetObject; } /** * 獲得代理對象 */ public Object getObjectProxy() { /** * 生成動態代理 * 第一個參數設置代碼使用的類裝載器,一般采用跟目標類相同的類裝載器 * 第二個參數把被代理對象實現的接口給他 * 第三個參數設置回調對象,當代理對象的方法被調用時,會委派給該參數指定對象的invoke方法 */ ClassLoader classLoader = UserServiceProxyFactory.class.getClassLoader(); Class<?>[] interfaces = UserServiceImpl.class.getInterfaces(); return Proxy.newProxyInstance(classLoader, interfaces, this); } /** * 第一個參數,會把當前代理對象傳給你 * 第二個參數,當前執行的方法傳給你 * 第三個參數,當前方法的參數傳給你 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 前置增強的 System.out.println("打開事務"); // 本來的方法 Object invoke = method.invoke(targetObject, args); // 后置增強 System.out.println("提交事務"); return invoke; } } ~~~ 測試下 ~~~ @Test public void index() { UserService us = new UserServiceImpl(); UserServiceProxyFactory factory = new UserServiceProxyFactory(us); UserService usProxy = (UserService) factory.getObjectProxy(); usProxy.save(); } ~~~
                  <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>

                              哎呀哎呀视频在线观看