Spring 프레임의 삽입점 포인트컷 표현식에 대한 일반적인 쓰기 설명

4539 단어 spring
AspectJ 스타일의 절단면 설정을 사용하여spring의 절단면 설정을 크게 간소화시켰지만 AspectJ는 또 다른 개원 항목으로 그 규칙 표현식의 문법도 약간 이상하다.
다음은 서비스 패키지의 모든 방법에 대한 탄젠트 구성과 같은 일반적인 예제입니다.

<aop:config> 
  <aop:pointcut id="serviceOperation" expression="execution(* *..service*..*(..))"/> 
  <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/> 
</aop:config>
표현식이 있는 위치는 위pointcut의 위치와 같습니다.이것을 설정하는 것은 절단면의 업무를 더욱 잘 통제하기 위해서이다. 다음은 사물 설정의 간단한 예이다.

<tx:advice id="txAdvice" transaction-manager="transactionManager"> 
   <tx:attributes> 
      <tx:method name="delete*" rollback-for="Exception"/> 
      <tx:method name="save*" rollback-for="Exception"/> 
      <tx:method name="update*" rollback-for="Exception"/> 
      <tx:method name="*" read-only="true" rollback-for="Exception"/> 
    </tx:attributes> 
</tx:advice>
절단면, 알림 설정을 통해 delete,save,update로 시작하는 모든 방법에 일치성 사무를 추가하고 다른 방법에 읽기 전용 사무를 추가합니다.
이것은 아직 세밀하지 않다. 만약에 더욱 상세한 통제를 쓰려면 AspectJ 절점 설정의 문법을 연구해야 한다. 사실 이런 기준을 연구하려면 차라리 몇 가지 예를 들어 실제 문제를 해결하면 된다.정규 표현식을 쓰는 것처럼 표준이 명확하고 잘 써야 하는데 쉽지 않다. 예부터 시작하면 빨리 시작하고 깨달을 수 있다.
다음 문서는 Spring 중국어 개발 가이드 2.5 문서로 만강홍개원 조직에서 번역되었습니다.
Spring AOP 사용자는 execution 삽입점 인디케이터를 자주 사용할 수 있습니다.표현식 형식은 다음과 같습니다.

execution(modifiers-pattern? 
ret-type-pattern declaring-type-pattern? 
name-pattern(param-pattern)throws-pattern?)
반환 형식 모드 (위 코드 단편의ret-type-pattern), 이름 모드와 매개 변수 모드를 제외한 모든 부분은 선택할 수 있습니다.반환 유형 모드는 방법의 반환 유형이 순서대로 연결점과 일치해야 한다는 것을 결정합니다.가장 자주 사용할 반환 유형 모드는 *입니다. 이것은 임의의 반환 유형과 일치하는 것을 의미합니다.한정된 형식 이름은 주어진 형식을 되돌려주는 방법과 일치합니다.이름 패턴이 일치하는 것은 방법 이름입니다.* 와일드카드를 모든 이름 모드 또는 일부 이름 모드로 사용할 수 있습니다.매개 변수 모드가 좀 복잡합니다. () 매개 변수를 받아들이지 않는 방법과 일치합니다. (...)임의의 수량 매개 변수를 받아들이는 방법(0 또는 그 이상)과 일치합니다.모드 (*) 는 모든 유형의 매개 변수를 받아들이는 방법과 일치합니다.모드(*, String)는 두 매개변수를 수용하는 방법과 일치합니다. 첫 번째는 임의의 유형이고 두 번째는 String 유형이어야 합니다.자세한 내용은 AspectJ 프로그래밍 가이드의 언어 의미 부분을 참조하십시오.다음은 일반적인 절입점 표현식의 예를 제시한다.
모든 공통 방법의 실행:

execution(public * *(..))
어떤 이름이든 set으로 시작하는 방법의 실행:

execution(* set*(..))
AccountService 인터페이스에 정의된 모든 방법의 실행:

execution(* com.xyz.service.AccountService.*(..))
서비스 패키지에 정의된 모든 방법의 실행:

execution(* com.xyz.service.*.*(..))
서비스 패키지나 하위 패키지에 정의된 모든 방법의 실행:

execution(* com.xyz.service..*.*(..))
서비스 패키지의 임의의 연결 지점(Spring AOP에서는 방법으로만 수행):

within(com.xyz.service.*)
서비스 패키지 또는 하위 패키지의 모든 연결 지점(Spring AOP에서는 방법으로만 수행됨):

within(com.xyz.service..*)
AccountService 인터페이스를 구현하는 프록시 객체의 임의 연결 지점(Spring AOP에서는 방법으로만 수행됨):

this(com.xyz.service.AccountService)
AccountService 인터페이스를 구현하는 대상 객체에 대한 임의의 연결 지점(Spring AOP에서는 방법으로만 수행됨):

target(com.xyz.service.AccountService)
매개 변수를 하나만 받아들이고 실행할 때 전송되는 매개 변수는 Serializable 인터페이스의 연결 점(Spring AOP에서는 방법으로만 실행됨)입니다.

args(java.io.Serializable)
예에서 제시한 삽입점은 execution (* (Java.io.Serializable) 과 같지 않습니다. args 버전은 동적 실행 시 매개 변수가 Serializable일 때만 일치하고, execution 버전은 방법 서명에서 Serializable 형식의 매개 변수만 일치한다고 설명합니다.
대상 객체에 @Transactional 메모가 있는 임의의 연결 지점(Spring AOP에서는 방법으로만 수행됨):

@target(org.springframework.transaction.annotation.Transactional)
대상 객체 선언의 유형에는 @Transactional 메모의 연결 지점이 있습니다.

@within(org.springframework.transaction.annotation.Transactional)
실행 방법 중 하나에는 @Transactional 메모의 연결 지점이 있습니다(Spring AOP에서는 실행 방법만 사용).

@annotation(org.springframework.transaction.annotation.Transactional)
매개 변수를 하나만 수용하고 실행할 때 전송되는 매개 변수 유형에는 @Classified 메모가 있는 연결점이 있습니다(Spring AOP에서는 방법으로만 실행됨).

@args(com.xyz.security.Classified)
trade Service라는 Spring bean 위에 있는 모든 연결점(Spring AOP에서는 방법으로만 실행됨):

bean(tradeService)
이름 일치 와일드카드 표현식 * Service의 Spring bean 위에 있는 모든 연결 지점(Spring AOP에서는 방법으로만 실행됨):

bean(*Service)
그 중에서 this, tagart, args, @target, @with, @annotation@args 귀속 표에서 더욱 자주 사용된다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기