Spring-AOP 정적 정규 표현 식 방법 은 절단면 과 어떻게 일치 합 니까?

개술
4Spring-AOP 정적 일반 방법 명 일치 절단면사례 에서 Static MethodMatcher PointcutAdvisor 에서 방법 명 을 통 해 절 점 을 정의 할 수 있 습 니 다.이런 설명 방식 은 유연 하지 않 습 니 다.목표 류 에 여러 가지 방법 이 있다 고 가정 하면 일정한 명명 규범 을 만족 시 키 고 정규 표현 식 을 사용 하여 일치 하 는 것 이 훨씬 유연 합 니 다.
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 {
	@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");
	}
}
실행 결과
这里写图片描述
이 를 통 해 알 수 있 듯 이 Waiter 와 Seller 의 greetTo()는 모두 절단면 에 성공 적 으로 짜 였 고 Waiter.server To()는 절단면 에 짜 이지 않 았 다.
RegexpMethodPointcutAdvisor 는 pattern 과 advice 속성 외 에 또 다른 두 가지 속성 이 있 습 니 다.
patterns:일치 하 는 문자열 모드 만 있다 면 pattern 속성 설정 을 사용 할 수 있 습 니 다.여러 개의 일치 하 는 패턴 을 정의 하려 면 patterns 속성 을 사용 해 야 합 니 다.이 일치 하 는 패턴 문자열 은'또는'의 관계 입 니 다.order:절단면 짜 임 시 대응 하 는 순서
정규 표현 식 문법



정규 표현 식 도구 RegexBuddy
这里写图片描述
RegexBuddy 를 사용 하여 간단하게 측정 할 수 있 습 니 다.일치 하면 아래 에 노란색 으로 표 시 됩 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기