측면을 사용하여 컴파일 된 Java 클래스 동작을 신속하게 수정하는 방법

StackOverflow https://stackoverflow.com/questions/435348

  •  10-07-2019
  •  | 
  •  

문제

측면 J를 사용하여 일부 Java 응용 프로그램에 일시적으로 기능을 추가하는 방법은 무엇입니까? 측면 생성, AJC를 컴파일하고 측면을 적용하기 위해 추가 스위치와 함께 Java 명령을 사용하는 것과 같은 것이 있습니까?

도움이 되었습니까?

해결책

질문은 런타임 동안 SAGENTJ에 의해 직조 된 코드를 활성화/비활성화 할 수 있다고 생각합니다.

SAGOLJ에 내장 메커니즘이 있는지는 모르겠지만 조건부 명령문으로 측면에서 코드를 랩핑 할 수 있다고 확신합니다. 그러면 코드가 켜거나 끄는 런타임 스위치 만 있으면됩니다.

예를 들어

// HelloWorld.java
public class HelloWorld {
    public static void say(String message) {
        System.out.println(message);
    }

    public static void sayToPerson(String message, String name) {
        System.out.println(name + ", " + message);
    }
}


// PoliteHelloWorld.java
public aspect PoliteHelloWorld {
    pointcut callSayMessage() : call(public static void HelloWorld.say*(..));
    before() : callSayMessage() {
        if( is_aspectj_turned_on_this_run() ) {
            System.out.println("Good day!");
        }
    }
    after() : callSayMessage() {
        if( is_aspectj_turned_on_this_run() ) {
            System.out.println("Thank you!");
        }
    }
}

"구현하고 싶은 방법"is_aspect_j_turned_on_this_run()"당신에게 달려 있습니다 (아마도 명령 줄 인수 또는 사용자 입력에 의해 설정 되었습니까?)

더 나은 방법이 있습니다. 이것은 런타임에 비활성화하려는 측면을 처리하는 측면을 올바르게하는 것입니다. 이 새로운 추가 측면은 귀하의 점검을 담당합니다.is_aspect_j_turned_on_this_run()".이 깨끗한 방법에 대한 자세한 내용은 여기

이 두 가지 방법보다 더 나은 방법이 있는지는 모르겠지만 (매우 잘할 수 있음) 최소한 런타임에 런타임을 켜고 끄는만큼 다시 컴파일하지 않고 원하는만큼 켜질 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top