2014-01-29 3 views
1

내 비즈니스 로직 메소드에서 트랜잭션 관리를 위해 다음과 같이 주석을 사용했습니다. 다음과 같이Spring AOP : @Transactional 주석이 달린 메소드가있는 메소드의 주석 처리 된 포인트 컷?

@Service 
public class SampleBusinessLogicImpl implements SampleBusinessLogic { 


    @Override 
    @Transactional(rollbackFor=Exception.class) 
    public Sample createSample(Sample sample) throws SampleException { 
      ... 
     } 
} 

나는이 방법에 대한 또 다른 측면을 실행하고 싶었, 나는 측면을 정의 :

@Aspect 
public class SampleDynamicValidationAspect { 

    private static final Logger logger = LoggerFactory.getLogger(RequestValidationAspect.class); 


    @Before("execution(public * com.rakuten.gep.sample.businesslogic.impl.SampleBusinessLogicImpl.createSample(com.rakuten.gep.sample.entity.common.Sample,..)) && args(sample,..) throws *Exception") 
    public void validate(Sample sample) throws SampleException { 
     //Dynamic validation here. 
     //If some validation is failed, wrapped the appropiate exception in SampleException 
     logger.debug("Involking Dynamic Validator"); 
     System.out.println("************** Dynaic Validator *************"); 
    } 
} 
I 작동 잘 로그를보고 거래를 볼 수 있습니다

있지만 새로 선언 조언하지 않습니다 처형되다.

어떤 것이 있습니까?

+1

당신이 당신의 봄 구성을 확인 및 측면이 빈으로 구성된 경우 볼 수 있어야한다? 문제가있을 수 있으므로 여기에 구성을 게시하십시오. – svjn

답변

1

의 유효성을 검사하기 위해 (JointPoint를) 검증 (샘플)을 변경하는

1

당신은 여러 가지 방법으로 달성 할 수보십시오. 예를 들어 테스트 할 수있는 다른 pointcut 옵션을 찾을 수 있습니다. 아래에서 다양한 옵션을 찾을 수 있습니다. 모든 public 메소드를 실행하여 @Transactional

execution(@Transactional * *.*(..)) 

일치하는 모든 실행함으로써

(당신이 당신의 화면 프레임 워크가 잘 구성되어 있는지 테스트하기 위해 사용할 수 있습니다). 다음 중 하나가 확인 일 경우

@Pointcut("execution(@Transactional* *.*(..))") 
public void monitorRequestTargets(){} 

@Around("monitorRequestTargets()") 
public void validate(Sample sample) throws SampleException { 

가 알려줘 : 귀하의 측면에 적용 다음과 같은 포인트 컷을 추가하고하여

execution(public * *(..)) 

.

0

귀하의 pointcut 표현은

@Before("execution(public * com.rakuten.gep.sample.businesslogic.impl.SampleBusinessLogicImpl.createSample(com.rakuten.gep.sample.entity.common.Sample,..) throws *Exception) && args(sample,..)")