麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

Spring AOP手動實現簡單動態代理的代碼

2024-07-14 08:43:35
字體:
來源:轉載
供稿:網友

什么是AOP我們先來看一張圖

Spring,AOP,動態代理,代碼

圖中A就是通知,比如你要給每個方法前都加一個before()方法,目標類的每一個方法叫joinpoint(切入點),每個切入點都會用到通知,把通知和切入點連起來,點成線,線成面,這就是切面,也就是AOP,下面我們來簡單寫個小例子來實現一下

目標類的接口

public interface UserService {  public void addUser() ;  public void updateUser();  public void deleteUser();}

目標類接口的實現

public class UserServiceImpl implements UserService {  @Override  public void addUser() {    System.out.println("addUser");  }  @Override  public void updateUser() {    System.out.println("updateUser");  }  @Override  public void deleteUser() {    System.out.println("deleteUser");  }}

通知類

public class MyAspect {  public void before(){    System.out.println("before");  }  public void after(){    System.out.println("after");  }}

代理類

public class MyBeanFactory {  public static UserService createService(){    //1.目標類    final UserService userService = new UserServiceImpl() ;    //2.切面類    final MyAspect myAspect = new MyAspect();//    切入點和切面類結合//   三個參數//    1. loader ,類加載器 運行是加載,用類加載器將其加載到內存//    2. interfaces 代理類需要實現的所有接口//    3. invocationHandler 處理類,一般采用匿名內部類//    提供了invoke方法 代理類每個方法執行時都將調用一次invoke ,又有三個參數//    1. Object proxy 代理對象//    2. Method method 代理對象方法的反射//    3. Object[] args 方法的實際參數    UserService proxyService = (UserService) Proxy.newProxyInstance(MyBeanFactory.class.getClassLoader(),        userService.getClass().getInterfaces(),        new InvocationHandler() {          @Override          public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {            System.out.println(method.getName());            myAspect.before();            Object obj = method.invoke(userService, args);            myAspect.after();            return obj ;          }        });    return proxyService ;  }}

測試類

public class UserServiceImplTest {  @org.junit.jupiter.api.Test  public void demo() throws Exception {      UserService userService = MyBeanFactory.createService();      userService.addUser();      userService.deleteUser();      userService.updateUser();  }}

結果

addUser
before
addUser
after
deleteUser
before
deleteUser
after
updateUser
before
updateUser
after
Process finished with exit code 0

我們可以看到每個方法都執行了通知,用了動態代理就不用手動的給每個方法前后加入通知,這樣既節省了時間,也保證了主體代碼不被改變

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产午夜亚洲精品 | 成人福利在线免费观看 | 国产98色 | 一级色毛片| 国内精品久久久久影院不卡 | 毛片a片 | 久久久激情网 | 欧美一级久久 | 亚洲网站在线观看视频 | 国产高潮失禁喷水爽到抽搐视频 | 久久久久久久久久久久久久av | 久草手机在线 | 高清国产午夜精品久久久久久 | 国产精品99久久99久久久二 | 麻豆传传媒久久久爱 | 久久亚洲精品久久国产一区二区 | 精品一区二区三区免费毛片爱 | www.com香蕉 | 国产精品视频一区二区三区四区国 | 国产精品自在线拍 | 12av毛片| 国产精品久久久久久久久久久久久久久 | 免费人成在线观看网站 | 国产一区二区在线免费播放 | 在线亚洲欧美日韩 | 91精品观看91久久久久久国产 | 欧美伦理一区二区 | 四季久久免费一区二区三区四区 | 国产一区二区在线免费 | h视频在线播放 | 色的综合 | 俄罗斯16一20sex牲色另类 | 一级毛片在线观看免费 | 成人毛片视频免费看 | 日本爽快片100色毛片视频 | 亚洲一区在线免费视频 | 国产91中文字幕 | 一区二区国产在线 | 国产精品视频不卡 | 视频一区二区三区在线播放 | 欧美色性 |