亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring-AOP 靜態正則表達式方法怎么匹配切面

發布時間:2021-07-19 14:18:09 來源:億速云 閱讀:154 作者:小新 欄目:開發技術

小編給大家分享一下Spring-AOP 靜態正則表達式方法怎么匹配切面,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

概述

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

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

實例

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

Spring-AOP 靜態正則表達式方法怎么匹配切面

業務類 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 {
	@Override
	public 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 {
	@Test
	public void test() {
		// 加載配置文件,啟動容器
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"classpath:com/xgj/aop/spring/advisor/RegexpMethodPointcutAdvisor/conf-advisor.xml");
		// 從容器中獲取Bean
		Waiter waiter = ctx.getBean("waiter", Waiter.class);
		Seller seller = ctx.getBean("seller", Seller.class);
		// 調用業務方法
		waiter.greetTo("XiaoGongJiang");
		waiter.serverTo("XiaoGongJiang");
		seller.greetTo("XiaoGongJiang");
	}
}

運行結果

Spring-AOP 靜態正則表達式方法怎么匹配切面

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

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

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

正則表達式語法

Spring-AOP 靜態正則表達式方法怎么匹配切面

Spring-AOP 靜態正則表達式方法怎么匹配切面

Spring-AOP 靜態正則表達式方法怎么匹配切面

正則表達式工具 RegexBuddy

Spring-AOP 靜態正則表達式方法怎么匹配切面

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

看完了這篇文章,相信你對“Spring-AOP 靜態正則表達式方法怎么匹配切面”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陆良县| 会理县| 崇左市| 墨江| 临朐县| 金寨县| 菏泽市| 新津县| 汤阴县| 庆元县| 共和县| 始兴县| 法库县| 西华县| 北宁市| 澄江县| 天祝| 高尔夫| 义马市| 蒲城县| 鸡西市| 武鸣县| 天柱县| 迁安市| 安溪县| 余干县| 泸水县| 平武县| 江油市| 利津县| 应城市| 来安县| 常宁市| 上虞市| 涟水县| 龙游县| 穆棱市| 读书| 时尚| 泉州市| 台南县|