日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java动态代理模拟spring的AOP

發布時間:2023/12/1 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java动态代理模拟spring的AOP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? 廣州瘋狂軟件學院擁有三大課程體系包括:java課程,android課程,ios課程,瘋狂軟件年終鉅惠,報名java就業班,免費贈送基礎班,名額有限,本月火熱報名中,歡迎有志之士電話或者咨詢。

  spring中的AOP是通過Java的動態代理實現的,有關動態代理的詳細解釋參見:

  現在就使用Java的動態代理模擬AOP(使用JDK的動態代理)

  1.建立實體對象

  public class User {

  Integer id;

  String name;

  String pwd;

  public User() {

  }

  public User(int id, String name, String pwd) {

  this.id = id;

  this.name = name;

  this.pwd = pwd;

  }

  //setter/getter

  }

  2.建立接口

  public interface UserDao {

  public void addUser(User user);

  }

  3.實現接口

  public class UserDaoImpl implements UserDao{

  @Override

  public void addUser(User user){

  System.out.println("保存User到數據庫中");

  throw new RuntimeException();

  }

  }

  4.創建攔截器(這個類就相當于aop中的切面類)

  public class MyInterceptor implements InvocationHandler {

  private Object target;

  public MyInterceptor() {

  }

  public MyInterceptor(Object target) {

  this.target = target;

  }

  public Object getTarget() {

  return target;

  }

  public void setTarget(Object target) {

  this.target = target;

  }

  public void before() {

  System.out.println("這是一個前置通知");

  }

  public void afterReturning() {

  System.out.println("這是一個后置通知");

  }

  public void afterThrowing() {

  System.out.println("這是一個異常通知");

  }

  public void after() {

  System.out.println("這是一個最終通知");

  }

  @Override

  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

  Object returnValue = null;

  try {

  before();

  returnValue = method.invoke(target, args);

  afterReturning();

  } catch (Exception e) {

  afterThrowing();

  } finally {

  after();

  }

  return returnValue;

  }

  }

  5.通過代理對象實現目標方法

  @Test

  public void testAOP() {

  UserDao userDao = new UserDao();

  MyInterceptor interceptor = new MyInterceptor();

  interceptor.setTarget(userDao);

  //通過代理的靜態方法創建一個代理對象

  //這個代理創建的時候,接收了接口類型和攔截器的處理類,在代理的背后,他會調運攔截器的invoke這個

  方法。

  //因為傳遞的有接口類型,所以可以強制類型轉換到我們指定的接口類型

  UserDao userDaoProxy = (UserDao) Proxy.newProxyInstance(this.getClass().getClassLoader(),

  userDao.getClass().getInterfaces(),

  interceptor);

  //然后在代理對象處理的時候,就會將我的邏輯織如到被代理的對象上

  userDaoProxy.addUser(new User(1, "a", "b"));

  }

  6.程序輸出

  這是一個前置通知

  保存User到數據庫中

  這是一個異常通知

  這是一個最終通知

  瘋狂Java培訓專注軟件開發培訓,提升學員就業能力,重點提升實踐動手能力。技術知識沉淀深厚的老師,讓你感受Java的魅力,激發你對于編程的熱愛,讓你在半年的時間內掌握8-10萬的代碼量,掌握Java核心技術,成為真正的技術高手;通過大量全真企業項目瘋狂訓練,迅速積累項目經驗。讓你成為技能型的現代化高端人才,迅速獲得高薪就業!時間不等人,趕緊聯系我們吧!瘋狂java培訓中心地址:廣州天河區車陂灃宏大廈3樓。

  瘋狂Java培訓專注軟件開發培訓,提升學員就業能力,重點提升實踐動手能力。瘋狂軟件開設了java課程,ios課程,android課程,為你提供一個學習java技能的好機會,瘋狂軟件特大優惠活動,加瘋狂軟件微信號(瘋狂軟件),搶優惠,優惠100元+贈送iOS教材一本 詳情請看瘋狂java培訓官網。IT從業著仍是社會所需要的高端人才,廣州瘋狂軟件之力于培養企業所需要的中高端IT人才,讓你成為備受企業青睞的人才。

?

轉載于:https://www.cnblogs.com/gojava/p/3498977.html

總結

以上是生活随笔為你收集整理的Java动态代理模拟spring的AOP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。