最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring-AOP 靜態(tài)正則表達(dá)式方法如何匹配切面

 更新時(shí)間:2021年07月19日 10:45:43   作者:小小工匠  
這篇文章主要介紹了Spring-AOP 靜態(tài)正則表達(dá)式方法如何匹配切面的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

概述

Spring-AOP 靜態(tài)普通方法名匹配切面案例中 StaticMethodMatcherPointcutAdvisor中,僅能通過方法名定義切點(diǎn),這種描述方式不夠靈活,假設(shè)目標(biāo)類中有多個(gè)方法,切滿足一定的命名規(guī)范,使用正則表達(dá)式進(jìn)行匹配就靈活多了。

RegexpMethodPointcutAdvisor是正則表達(dá)式方法匹配的切面實(shí)現(xiàn)類,該類已經(jīng)是功能齊全的實(shí)現(xiàn)類,一般情況下無需擴(kuò)展該類。

實(shí)例

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

業(yè)務(wù)類 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類中的同名的方法,目的是為了驗(yàn)證僅僅織入了Waiter類中的greetTo方法
	 * 
	 * @param name
	 * 
	 * @return: void
	 */
	public void greetTo(String name) {
		System.out.println("Seller Greet to " + name);
	}
}

前置增強(qiáng)

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 {
		// 輸出切點(diǎn)
		System.out.println("Pointcut:" + target.getClass().getName() + "."
				+ method.getName());
		String clientName = (String) args[0];
		System.out.println("How are you " + clientName + " ?");
	}
}

配置文件

RegexpMethodPointcutAdvisor是正則表達(dá)式方法匹配的切面實(shí)現(xiàn)類,該類已經(jīng)是功能齊全的實(shí)現(xiàn)類,一般情況下無需擴(kuò)展該類。

直接使用RegexpMethodPointcutAdvisor,通過配置的方式為目標(biāo)類定義一個(gè)切面

<?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">
	
	<!-- 配置切面:靜態(tài)正則表達(dá)式方法匹配切面 -->
	
	<!-- Waiter目標(biāo)類 -->
	<bean id="waiterTarget" class="com.xgj.aop.spring.advisor.RegexpMethodPointcutAdvisor.Waiter"/>
	<!-- Seller目標(biāo)類 -->
	<bean id="sellerTarget" class="com.xgj.aop.spring.advisor.RegexpMethodPointcutAdvisor.Seller"/>
	
	<!-- 前置增強(qiáng) -->
	<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.*" > <!--  向切面注入一個(gè)前置增強(qiáng)  , 用正則表達(dá)式定義目標(biāo)類全限定方法名的匹配模式串 。-->
		
	</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>

單元測(cè)試

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: 單元測(cè)試類
 * 
 * @author: Mr.Yang
 * 
 * @date: 2017年8月18日 下午11:30:01
 */
public class RegexpMethodPointcutAdvisorTest {
	@Test
	public void test() {
		// 加載配置文件,啟動(dòng)容器
		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);
		// 調(diào)用業(yè)務(wù)方法
		waiter.greetTo("XiaoGongJiang");
		waiter.serverTo("XiaoGongJiang");
		seller.greetTo("XiaoGongJiang");
	}
}

運(yùn)行結(jié)果

這里寫圖片描述

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

RegexpMethodPointcutAdvisor除了pattern和advice屬性外 ,還有另外兩個(gè)屬性

patterns: 如果只有一個(gè)匹配串模式,這可以使用pattern屬性配置,如果需要定義多個(gè)匹配模式穿,就需要使用patterns屬性了, 這些匹配模式串是“或"的關(guān)系。order:切面織入時(shí)對(duì)應(yīng)的順序

正則表達(dá)式語(yǔ)法

正則表達(dá)式工具 RegexBuddy

這里寫圖片描述

可以使用RegexBuddy簡(jiǎn)單的測(cè)下,如果匹配,下方會(huì)以黃色標(biāo)注。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 分析Java中Map的遍歷性能問題

    分析Java中Map的遍歷性能問題

    隨著JDK 1.8 Streams API的發(fā)布,使得HashMap擁有了更多的遍歷的方式,但應(yīng)該選擇那種遍歷方式?反而成了一個(gè)問題。本文從幾個(gè)方面來分析 HashMap各種遍歷方式的優(yōu)勢(shì)與不足
    2021-06-06
  • Spring Boot 整合 Shiro+Thymeleaf過程解析

    Spring Boot 整合 Shiro+Thymeleaf過程解析

    這篇文章主要介紹了Spring Boot 整合 Shiro+Thymeleaf過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java中for循環(huán)刪除集合陷阱

    java中for循環(huán)刪除集合陷阱

    java中在增強(qiáng)for循環(huán)為什么不能增刪集合呢?一個(gè)循環(huán)迭代,跟集合的增刪改沒什么關(guān)系。修改集合不是for去做的。for只管循環(huán)迭代,你在循環(huán)里邊修改集合,改變集合的長(zhǎng)度,順序?qū)ρh(huán)都有影響
    2015-05-05
  • SpringBoot實(shí)現(xiàn)熱部署的三種方式

    SpringBoot實(shí)現(xiàn)熱部署的三種方式

    本文主要介紹了SpringBoot實(shí)現(xiàn)熱部署的三種方式,主要包括配置pom.xml文件,使用插件的執(zhí)行命令mvn spring-boot:run啟動(dòng)項(xiàng),使用springloader本地啟動(dòng)修改jvm參數(shù),使用devtools工具包,感興趣的可以了解一下
    2023-12-12
  • Java值傳遞和引用傳遞詳解

    Java值傳遞和引用傳遞詳解

    這篇文章主要為大家詳細(xì)介紹了Java值傳遞和引用傳遞,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • SpringBoot實(shí)現(xiàn)設(shè)置動(dòng)態(tài)定時(shí)任務(wù)的方法詳解

    SpringBoot實(shí)現(xiàn)設(shè)置動(dòng)態(tài)定時(shí)任務(wù)的方法詳解

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)設(shè)置動(dòng)態(tài)定時(shí)任務(wù)的方法詳解,SpringBoot是一個(gè)快速開發(fā)的Java框架,而動(dòng)態(tài)定時(shí)任務(wù)是指可以在運(yùn)行時(shí)動(dòng)態(tài)添加、修改和刪除定時(shí)任務(wù)的功能,需要的朋友可以參考下
    2023-10-10
  • java用靜態(tài)工廠代替構(gòu)造函數(shù)使用方法和優(yōu)缺點(diǎn)

    java用靜態(tài)工廠代替構(gòu)造函數(shù)使用方法和優(yōu)缺點(diǎn)

    這篇文章主要介紹了java用靜態(tài)工廠代替構(gòu)造函數(shù)使用方法和優(yōu)缺點(diǎn),需要的朋友可以參考下
    2014-02-02
  • Java中args參數(shù)數(shù)組的用法說明

    Java中args參數(shù)數(shù)組的用法說明

    這篇文章主要介紹了Java中args參數(shù)數(shù)組的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Elasticsearch 基礎(chǔ)介紹及索引原理分析

    Elasticsearch 基礎(chǔ)介紹及索引原理分析

    這篇文章主要介紹了Elasticsearch 基礎(chǔ)介紹及索引原理分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Java IO之File 類詳解

    Java IO之File 類詳解

    這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評(píng)論

永嘉县| 龙海市| 辽阳县| 盐城市| 潜山县| 谢通门县| 银川市| 万盛区| 土默特右旗| 马龙县| 吴江市| 株洲市| 柘荣县| 永嘉县| 冕宁县| 柘城县| 德兴市| 盈江县| 汤阴县| 金秀| 惠水县| 祁阳县| 海安县| 寿宁县| 佛坪县| 广汉市| 芮城县| 惠州市| 太仆寺旗| 丽水市| 怀宁县| 平邑县| 丹寨县| 芜湖县| 东至县| 绥中县| 周宁县| 泸州市| 休宁县| 清新县| 太保市|