복붙노트

[SPRING] Aspectj 및 개인 또는 내부 메소드 가져 오기

SPRING

Aspectj 및 개인 또는 내부 메소드 가져 오기

나는 Spring에서 AspectJ를 구성했으며 클래스 밖에서 호출 된 공용 메소드를 "catch"할 때 잘 동작한다. 이제 나는 이와 같은 것을하고 싶다.

public class SomeLogic(){

   public boolean someMethod(boolean test){

      if(test){
        return innerA();
      } else {
        return innerB();
      }
   }


   private boolean innerA() {// some logic}
   private boolean innerA() {// some other logic}

}

SomeLogic은 SpringBean입니다. 메소드 innerA ()와 innerB ()는 private 또는 public으로 선언 될 수 있습니다. someMethod () 메소드는 Struts 액션에서 호출됩니다. AspectJ에서 someMethod ()에서 호출 된 innerA () 또는 innerB () 메서드를 catch하는 것이 가능합니까?

내 config (XML 기반) :

    <aop:aspect id="innerAAspect" ref="INNER_A">
        <aop:pointcut id="innerAService" expression="execution(* some.package.SomeLogic.innerA(..))"/>
    </aop:aspect>

    <aop:aspect id="innerAAround" ref="INNER_A">
        <aop:around pointcut-ref="innerAService" method="proceed"/>
    </aop:aspect>


    <aop:aspect id="innerBAspect" ref="INNER_B">
        <aop:pointcut id="innerBService" expression="execution(* some.package.SomeLogic.innerB(..))"/>
    </aop:aspect>

    <aop:aspect id="innerBAround" ref="INNER_B">
        <aop:around pointcut-ref="innerBService" method="proceed"/>
    </aop:aspect>

해결법

  1. ==============================

    1.예, AspectJ를 사용하여 개인 메소드를 쉽게 catch 할 수 있습니다.

    예, AspectJ를 사용하여 개인 메소드를 쉽게 catch 할 수 있습니다.

    모든 개인 메서드 앞에 문장을 인쇄하는 예제입니다.

     @Pointcut("execution(private * *(..))")
     public void anyPrivateMethod() {}
    
     @Before("anyPrivateMethod()")
     public void beforePrivateMethod(JoinPoint jp) {
         System.out.println("Before a private method...");
     }
    

    이클립스에 익숙하다면 STS로 AspectJ를 개발하거나 AJDT 플러그인 만 설치하는 것이 좋다.

    Spring AOP 기능에 대한 더 많은 정보는 Spring 레퍼런스 문서에서 찾을 수있다.

  2. from https://stackoverflow.com/questions/4402009/aspectj-and-catching-private-or-inner-methods by cc-by-sa and MIT license