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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java动态代理模拟spring的AOP

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

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

  spring中的AOP是通過Java的動態(tài)代理實現(xiàn)的,有關(guān)動態(tài)代理的詳細(xì)解釋參見:

  現(xiàn)在就使用Java的動態(tài)代理模擬AOP(使用JDK的動態(tài)代理)

  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.實現(xiàn)接口

  public class UserDaoImpl implements UserDao{

  @Override

  public void addUser(User user){

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

  throw new RuntimeException();

  }

  }

  4.創(chuàng)建攔截器(這個類就相當(dāng)于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.通過代理對象實現(xiàn)目標(biāo)方法

  @Test

  public void testAOP() {

  UserDao userDao = new UserDao();

  MyInterceptor interceptor = new MyInterceptor();

  interceptor.setTarget(userDao);

  //通過代理的靜態(tài)方法創(chuàng)建一個代理對象

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

  方法。

  //因為傳遞的有接口類型,所以可以強(qiáng)制類型轉(zhuǎn)換到我們指定的接口類型

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

  userDao.getClass().getInterfaces(),

  interceptor);

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

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

  }

  6.程序輸出

  這是一個前置通知

  保存User到數(shù)據(jù)庫中

  這是一個異常通知

  這是一個最終通知

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

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

?

轉(zhuǎn)載于:https://www.cnblogs.com/gojava/p/3498977.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。