日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Spring創建AOP代理并非只有@Aspect一種方式

來源: 責編: 時間:2024-04-02 17:22:53 245觀看
導讀環境:Spring6.1.21. 簡介在Spring項目中,使用@Aspect注解定義切面(Aspect)并創建AOP(面向切面編程)代理是一種常見的做法,它主要用于實現跨多個類和方法的橫切關注點(Cross-cutting Concerns)的模塊化。下面是對使用@Aspect定

環境:Spring6.1.22nm28資訊網——每日最新資訊28at.com


1. 簡介2nm28資訊網——每日最新資訊28at.com

在Spring項目中,使用@Aspect注解定義切面(Aspect)并創建AOP(面向切面編程)代理是一種常見的做法,它主要用于實現跨多個類和方法的橫切關注點(Cross-cutting Concerns)的模塊化。下面是對使用@Aspect定義切面以及創建AOP代理的示例:2nm28資訊網——每日最新資訊28at.com

@Aspectpublic class LogAspect {  // 定義切點  @Pointcut("execution(* com.pack..*.*(..))")  public void log() {  }  // 前置通知  @Before("log()")  public void beforeLog() {    System.out.println("記錄日志Before...");  }  // 后置通知  @After("log()")  public void afterLog() {    System.out.println("記錄日志After");  }  // 異常通知  @AfterThrowing(pointcut = "log()", throwing = "tx")  public void ex(Throwable tx) {    System.err.println("發生異常: " + tx.getMessage()) ;  }  // 環繞通知  @Around("log() && args(name)")  public Object around(ProceedingJoinPoint pjp, String name) throws Throwable {    System.out.println("log before...") ;    System.out.println("name = " + name) ;    Object ret = pjp.proceed() ;    System.out.println("log after...") ;    return ret ;  }}

以上是一個簡單的異常通知切面定義。在實際工作中絕大多數情況下都是通過上面的方式操作。2nm28資訊網——每日最新資訊28at.com

但是在某些場景下,你可能需要更細粒度的控制來創建代理對象,比如根據特定條件動態決定是否創建代理、自定義代理的創建過程或調整代理的行為。這時,使用ProxyFactoryBeanProxyFactory可以提供更大的靈活性。ProxyFactoryBean主要用于在Spring容器中配置和創建代理對象,而ProxyFactory則提供了編程式創建代理對象的能力。如果你需要在代碼中動態地創建代理對象,而不是通過Spring容器來管理,那么使用ProxyFactory可能更合適。2nm28資訊網——每日最新資訊28at.com

接下來將詳細介紹通過ProxyFactoryBean和ProxyFactory創建AOP代理對象。2nm28資訊網——每日最新資訊28at.com

2. 代理對象創建2nm28資訊網——每日最新資訊28at.com

2.1 ProxyFactoryBean創建代理
2nm28資訊網——每日最新資訊28at.com

該類提供了對切入點、任何適用的建議及其順序的完全控制。然而,如果您不需要這樣的控制,也可以選擇更簡單的選項。2nm28資訊網——每日最新資訊28at.com

ProxyFactoryBean與其他Spring FactoryBean實現一樣,引入了一個間層。簡單說如果你定義了一個名為foo的ProxyFactoryBean,那么引用foo的對象看不到ProxyFactoryBean實例本身,而是由ProxyFactoryBean中的getObject()方法實現創建的對象。此方法創建一個AOP代理,用于包裝目標對象。2nm28資訊網——每日最新資訊28at.com

ProxyFactoryBean很多關鍵的屬性繼承自ProxyConfig(Spring中所有aop代理工廠的超類)。這些關鍵屬性結束如下:2nm28資訊網——每日最新資訊28at.com

ProxyFactoryBean proxy = new ProxyFactoryBean() ;// 如果要代理的是目標類,而不是目標類的接口,則為True。如果該屬性值設置為true,則創建CGLIB代理proxy.setProxyTargetClass(false) ;// 控制是否對通過CGLIB創建的代理應用積極優化。除非您完全理解相關AOP代理如何處理優化,否則不應該輕松地使用此設置。目前僅用于CGLIB代理。它對JDK動態代理沒有影響。proxy.setOptimize(false) ;// 如果代理配置被凍結,則不再允許更改配置。無論是作為輕微的優化,還是當您不希望調用者在創建代理后能夠操作代理(通過建議的接口)時,這都是有用的。此屬性的默認值為false,因此允許更改(例如添加額外的通知)。proxy.setFrozen(false) ;// 確定是否應該在ThreadLocal中暴露當前代理,以便目標可以訪問它。如果目標需要獲取代理,而exposeProxy屬性被設置為true,那么可以使用AopContext.currentProxy()方法。proxy.setExposeProxy(false) ;// 接口名稱的字符串數組。如果沒有提供,則使用目標類的CGLIB代理proxy.setProxyInterfaces(new Class<?>[] {}) ;// 要應用的Advisor、攔截器或其他Advice名稱的字符串數組。點菜很重要,先到先得。也就是說,列表中的第一個攔截器是第一個能夠攔截調用的。proxy.setInterceptorNames("interceptor01") ;// 不管getObject()方法被調用的頻率如何,工廠是否應該返回一個對象。有幾個FactoryBean實現提供了這樣的方法。默認值為trueproxy.setSingleton(true) ;

以上是對ProxyFactoryBean創建代理對象時的核心配置說明。2nm28資訊網——每日最新資訊28at.com

完整使用案例如下:2nm28資訊網——每日最新資訊28at.com

public interface CommonDAO {}  public class PersonService {  public void save() {    System.out.println("save method invoke...") ;  }}@Configurationpublic class AppConfig {  @Bean  public MethodInterceptor logInterceptor() {    return new MethodInterceptor() {      @Override      public Object invoke(MethodInvocation invocation) throws Throwable {        System.out.println("日志記錄...") ;        return invocation.proceed() ;      }    };  }  @Bean  public ProxyFactoryBean personService() throws Exception {    ProxyFactoryBean proxy = new ProxyFactoryBean() ;    proxy.setProxyTargetClass(true) ;    proxy.setTargetSource(new SingletonTargetSource(new PersonService())) ;    proxy.setProxyInterfaces(new Class<?>[] {CommonDAO.class}) ;    proxy.setInterceptorNames("logInterceptor") ;    return proxy ;  }}

2.2 ProxyFactory創建代理2nm28資訊網——每日最新資訊28at.com

用Spring很容易通過編程創建AOP代理。這讓你可以在不依賴Spring IoC的情況下使用Spring AOP。由目標對象實現的接口會自動被代理。如下示例:2nm28資訊網——每日最新資訊28at.com

public interface CommonDAO {}public class PersonService {  public void save() {    System.out.println("save method invoke...") ;  }}public static void main(String[] args) {  ProxyFactory factory = new ProxyFactory(new PersonService()) ;  factory.setProxyTargetClass(true) ;  // 設置通知類(內部會自動的包裝為Advisor)  factory.addAdvice(new MethodInterceptor() {    @Override    public Object invoke(MethodInvocation invocation) throws Throwable {      System.out.println("權限控制...") ;      return invocation.proceed() ;    }  });  factory.addAdvisor(new PointcutAdvisor() {    @Override    public Advice getAdvice() {      return new MethodInterceptor() {        @Override        public Object invoke(MethodInvocation invocation) throws Throwable {          System.out.println("日志記錄...") ;          return invocation.proceed() ;        }      } ;    }    @Override    public Pointcut getPointcut() {      return new StaticMethodMatcherPointcut() {        @Override        public boolean matches(Method method, Class<?> targetClass) {          return method.getName().equals("save") ;        }      } ;    }  }) ;  PersonService ps = (PersonService) factory.getProxy() ;  ps.save() ;}

以上是本篇文章的全部內容,希望對你有幫助。2nm28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-80879-0.htmlSpring創建AOP代理并非只有@Aspect一種方式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 這七種UML圖的畫法,每個程序員都應該掌握!

下一篇: 三萬字80道Java基礎經典面試題總結(2024修訂版)

標簽:
  • 熱門焦點
  • 中興AX5400Pro+上手體驗:再升級 雙2.5G網口+USB 3.0這次全都有

    2021年11月的時候,中興先后發布了兩款路由器產品,中興AX5400和中興AX5400 Pro,從產品命名上就不難看出這是隸屬于同一系列的,但在外觀設計上這兩款產品可以說是完全沒一點關系
  • 天貓精靈Sound Pro體驗:智能音箱沒有音質?來聽聽我的

    這幾年除了手機作為智能生活終端最主要的核心之外,第二個可以成為中心點的產品是什么?——是智能音箱。 手機在執行命令的時候有兩種操作方式,手和智能語音助手,而智能音箱只
  • 6月安卓手機性價比榜:Note 12 Turbo斷層式碾壓

    6月份有一個618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產品也出現了歷史低價,那么各個價位段的產品性價比
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • 《英雄聯盟》夏季賽總決賽今日開打!JDG對陣LNG首發名單來了 Knight:準備三連冠

    8月5日消息,今日17:00,《英雄聯盟》2023LPL夏季賽總決賽將正式開打,由JDG對陣LNG。對兩支隊伍來說,這場比賽不僅要爭奪夏季賽冠軍,更要決定誰才是LPL賽區一
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內容創建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 10天營收超1億美元,《星鐵》比《原神》差在哪?

    來源:伯虎財經作者:陳平安即便你沒玩過《原神》,你一定聽說過的它的大名。恨它的人把《原神》開服那天稱作是中國游戲史上最黑暗的一天,有粉絲因為索尼在PS平臺上線《原神》,怒而
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久久99国产精品免费| 激情欧美亚洲| 欧美日韩成人| 欧美午夜一区二区三区免费大片| 国产精品xvideos88| 国产日韩精品视频一区| 在线观看日韩精品| 一本色道久久加勒比精品| 亚洲午夜在线观看| 久久精品毛片| 欧美精品在线视频| 欧美日韩免费高清| 国产日韩在线看| 亚洲国产小视频在线观看| 亚洲视频网在线直播| 久久se精品一区精品二区| 欧美成人福利视频| 国产精品婷婷午夜在线观看| 一色屋精品视频免费看| 亚洲美女精品一区| 欧美影院成年免费版| 欧美精品二区三区四区免费看视频| 国产精品久久久久久影院8一贰佰| 激情一区二区三区| 亚洲一区二区三区免费在线观看 | 久久精品国产亚洲精品| 欧美精品久久久久久| 国产精品视频精品| 91久久香蕉国产日韩欧美9色| 亚洲综合色自拍一区| 免费久久精品视频| 国产欧美一区二区白浆黑人| 亚洲卡通欧美制服中文| 久久高清福利视频| 欧美午夜在线视频| 亚洲国产综合在线| 欧美在线不卡| 国产精品sm| 亚洲精品国产系列| 久久久久99| 国产精品中文字幕欧美| 日韩视频免费观看高清完整版| 欧美中文在线视频| 欧美色图天堂网| 亚洲黄色在线视频| 欧美与黑人午夜性猛交久久久| 欧美三区在线视频| 91久久综合| 久久亚洲捆绑美女| 国产性做久久久久久| 亚洲网站在线| 欧美日韩免费一区二区三区| 亚洲国内自拍| 久久视频这里只有精品| 国产欧美一区二区白浆黑人| 亚洲视频欧美在线| 欧美另类在线播放| 亚洲黄色大片| 久久综合伊人77777麻豆| 国产模特精品视频久久久久| 亚洲视频免费看| 欧美日韩免费看| 91久久线看在观草草青青| 久久亚洲图片| 好看的亚洲午夜视频在线| 欧美一级在线播放| 国产精品一区免费视频| 亚洲一区二区精品| 欧美日韩综合网| 一本色道88久久加勒比精品 | 国产亚洲欧美另类中文 | 久久成人免费电影| 国产欧美日韩高清| 小嫩嫩精品导航| 国产精品入口夜色视频大尺度| 亚洲少妇自拍| 欧美午夜视频在线| 在线视频你懂得一区二区三区| 欧美日韩1区| 日韩午夜av| 欧美日韩在线播放| 亚洲桃花岛网站| 欧美先锋影音| 亚洲一区二区三区四区视频| 欧美性猛交视频| 亚洲综合精品| 国产欧美日韩一区二区三区| 亚洲欧美日韩一区在线| 国产麻豆午夜三级精品| 欧美专区在线| 精品动漫3d一区二区三区免费 | 蜜臀久久99精品久久久画质超高清 | 91久久久在线| 欧美日韩视频在线一区二区 | 欧美一区二区三区四区在线观看 | 在线观看欧美日韩| 欧美岛国激情| 99国内精品久久| 国产精品扒开腿做爽爽爽软件| 亚洲一级片在线看| 国产区精品视频| 久久理论片午夜琪琪电影网| 亚洲国产成人在线播放| 欧美精品色综合| 亚洲一区二区av电影| 国产欧美三级| 久久综合色影院| 日韩视频一区二区三区| 国产精品国产三级国产专播精品人| 午夜激情综合网| 韩日精品视频一区| 免费一区二区三区| 一本久久综合| 国产日韩欧美不卡| 免费看精品久久片| 正在播放亚洲| 国产亚洲欧美一区二区三区| 美女精品在线观看| 一本色道久久综合亚洲精品小说| 国产精品乱子久久久久| 久久久九九九九| 日韩五码在线| 国产亚洲精品aa午夜观看| 男女av一区三区二区色多| 一区二区91| 国产综合久久| 欧美日韩精品一区二区| 欧美一区二区网站| 亚洲国产另类 国产精品国产免费| 欧美日韩中文| 久久蜜臀精品av| 在线视频欧美日韩精品| 国产亚洲精品久久久| 欧美激情第五页| 欧美一区在线看| 亚洲精品免费网站| 国产欧美日韩综合精品二区| 欧美国产视频在线观看| 香蕉成人久久| 日韩视频二区| 国内精品久久久久影院优| 欧美精品在线免费播放| 欧美一区二区三区播放老司机| 亚洲激情视频在线| 国产区亚洲区欧美区| 欧美激情按摩在线| 久久丁香综合五月国产三级网站| 亚洲乱码国产乱码精品精可以看| 国产区在线观看成人精品| 欧美—级a级欧美特级ar全黄| 欧美在线播放高清精品| 一区二区三区**美女毛片| 黄色在线成人| 国产精品蜜臀在线观看| 欧美va天堂在线| 欧美专区在线观看一区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲国产成人av在线| 国产精品久久久久免费a∨| 欧美+日本+国产+在线a∨观看| 亚洲一区精彩视频| 亚洲日本电影在线| 韩国av一区二区三区| 国产精品久久久久久久久久免费 | 在线看日韩av| 国产日韩欧美亚洲一区| 欧美视频在线一区二区三区| 免费美女久久99| 欧美自拍偷拍| 亚洲欧美激情诱惑| 一本色道久久精品| 亚洲精品一线二线三线无人区| 黄色日韩在线| 国产欧美一区二区精品秋霞影院 | 美女被久久久| 久久精品天堂| 性欧美激情精品| 亚洲一区综合| 一区二区三区回区在观看免费视频| 狠狠色伊人亚洲综合成人| 国产精品综合色区在线观看| 欧美三级乱码| 欧美日韩成人精品| 欧美激情中文字幕一区二区| 可以看av的网站久久看| 欧美在线亚洲| 午夜精品影院在线观看| 亚洲在线观看视频| 一区二区欧美视频| 日韩一二三在线视频播| 91久久亚洲| 亚洲欧洲日本国产| 久久久欧美精品sm网站| 欧美在线视频一区二区| 亚洲欧美日本精品| 亚洲女ⅴideoshd黑人| 亚洲一区自拍| 亚洲免费网址| 亚洲欧美视频一区二区三区| 亚洲女女女同性video| 亚洲一级影院| 午夜视黄欧洲亚洲| 欧美在线观看视频在线| 性欧美在线看片a免费观看|