Spring-AOP 정적 정규 표현 식 방법 은 절단면 과 어떻게 일치 합 니까?
6942 단어 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 를 사용 하여 간단하게 측정 할 수 있 습 니 다.일치 하면 아래 에 노란색 으로 표 시 됩 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring-AOP@AspectJ 절 점 함수 의@annotation()용법다음은 하나의 실례 를 통 해@annotation()의 용법 을 설명 합 니 다.AnnotationTestAspect 는 NeedTest 를 표시 하 는 목표 방법 에 사용 할 뒷 절단면 강 화 를 정의 합 니 다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.