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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring-AOP 静态正则表达式方法匹配切面

發布時間:2025/3/21 javascript 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring-AOP 静态正则表达式方法匹配切面 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 實例
  • 正則表達式語法
  • 正則表達式工具 RegexBuddy

概述

在Spring-AOP 靜態普通方法名匹配切面案例中 StaticMethodMatcherPointcutAdvisor中,僅能通過方法名定義切點,這種描述方式不夠靈活,假設目標類中有多個方法,切滿足一定的命名規范,使用正則表達式進行匹配就靈活多了。

RegexpMethodPointcutAdvisor是正則表達式方法匹配的切面實現類,該類已經是功能齊全的實現類,一般情況下無需擴展該類。


實例

代碼已托管到Github—> https://github.com/yangshangwei/SpringMaster

業務類 Waiter和Seller

package com.xgj.aop.spring.advisor.RegexpMethodPointcutAdvisor;public class Waiter {/*** * * @Title: greetTo* * @Description:* * @param name* * @return: void*/public void greetTo(String name) {System.out.println("Waiter Greet to " + name);}/*** * * @Title: serverTo* * @Description:* * @param name* * @return: void*/public void serverTo(String name) {System.out.println("Waiter Server to " + name);} } package com.xgj.aop.spring.advisor.RegexpMethodPointcutAdvisor;public class Seller {/*** * * @Title: greetTo* * @Description: 和Waiter類中的同名的方法,目的是為了驗證僅僅織入了Waiter類中的greetTo方法* * @param name* * @return: void*/public void greetTo(String name) {System.out.println("Seller Greet to " + name);} }

前置增強

package com.xgj.aop.spring.advisor.RegexpMethodPointcutAdvisor;import java.lang.reflect.Method;import org.springframework.aop.MethodBeforeAdvice;/*** * * @ClassName: GreetBeforeAdivce* * @Description:* * @author: Mr.Yang* * @date: 2017年8月18日 下午11:29:46*/ public class GreetBeforeAdivce implements MethodBeforeAdvice {@Overridepublic void before(Method method, Object[] args, Object target)throws Throwable {// 輸出切點System.out.println("Pointcut:" + target.getClass().getName() + "."+ method.getName());String clientName = (String) args[0];System.out.println("How are you " + clientName + " ?");} }

配置文件

RegexpMethodPointcutAdvisor是正則表達式方法匹配的切面實現類,該類已經是功能齊全的實現類,一般情況下無需擴展該類。

直接使用RegexpMethodPointcutAdvisor,通過配置的方式為目標類定義一個切面

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置切面:靜態正則表達式方法匹配切面 --><!-- Waiter目標類 --><bean id="waiterTarget" class="com.xgj.aop.spring.advisor.RegexpMethodPointcutAdvisor.Waiter"/><!-- Seller目標類 --><bean id="sellerTarget" class="com.xgj.aop.spring.advisor.RegexpMethodPointcutAdvisor.Seller"/><!-- 前置增強 --><bean id="greetBeforeAdvice" class="com.xgj.aop.spring.advisor.RegexpMethodPointcutAdvisor.GreetBeforeAdivce"/><!-- 切面 --><bean id="regexpAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"p:advice-ref="greetBeforeAdvice"p:pattern=".*greet.*" > <!-- 向切面注入一個前置增強 , 用正則表達式定義目標類全限定方法名的匹配模式串 。--></bean><!-- 通過父bean,配置公共的信息 --><bean id="parent" abstract="true" class="org.springframework.aop.framework.ProxyFactoryBean"p:interceptorNames="regexpAdvisor"p:proxyTargetClass="true"/><!-- waiter代理 --><bean id="waiter" parent="parent" p:target-ref="waiterTarget"/><!-- seller代理 --><bean id="seller" parent="parent" p:target-ref="sellerTarget"/></beans>

單元測試

package com.xgj.aop.spring.advisor.RegexpMethodPointcutAdvisor;import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;/*** * * @ClassName: RegexpMethodPointcutAdvisorTest* * @Description: 單元測試類* * @author: Mr.Yang* * @date: 2017年8月18日 下午11:30:01*/ public class RegexpMethodPointcutAdvisorTest {@Testpublic void test() {// 加載配置文件,啟動容器ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/xgj/aop/spring/advisor/RegexpMethodPointcutAdvisor/conf-advisor.xml");// 從容器中獲取BeanWaiter waiter = ctx.getBean("waiter", Waiter.class);Seller seller = ctx.getBean("seller", Seller.class);// 調用業務方法waiter.greetTo("XiaoGongJiang");waiter.serverTo("XiaoGongJiang");seller.greetTo("XiaoGongJiang");} }

運行結果

可見,Waiter和 Seller的greetTo()都成功的織入了切面,Waiter.serverTo()沒有被織入切面。

RegexpMethodPointcutAdvisor除了pattern和advice屬性外 ,還有另外兩個屬性

  • patterns: 如果只有一個匹配串模式,這可以使用pattern屬性配置,如果需要定義多個匹配模式穿,就需要使用patterns屬性了, 這些匹配模式串是“或"的關系。
  • order:切面織入時對應的順序

正則表達式語法


正則表達式工具 RegexBuddy

可以使用RegexBuddy簡單的測下,如果匹配,下方會以黃色標注。

總結

以上是生活随笔為你收集整理的Spring-AOP 静态正则表达式方法匹配切面的全部內容,希望文章能夠幫你解決所遇到的問題。

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