누가 이 메서드를 호출 했는지 찾고 싶을 때


@CallerSensitive
public static void callerTestJDK7() {
Class clazz= Reflection.getCallerClass();
System.out.println("class: "+clazz);
}


java 1.7까지는 이렇게 썼으나

java 1.8부터는 안된다.

@CallerSensitive 붙이라는 에러만 뱉는다.

deprecated됐다는 말도 없다.

해당 native에 대한 권한이 삭제 된 것 같다.


java 1.8부터는 이렇게 하면 된다.


public static void callerTestJDK8() {

        new SecurityManager() {
            {
                Class<?>[] classes = getClassContext();
                for(Class<?> clazz : classes) {

                    String name = clazz.getName();
                    System.out.println("name: "+name);
                }
            }
        };

    }


보안쪽이 다 SecurityManager로 옮겨 갔나 보다.

그런데 어렵다. SecurityManager 객체를 생성하고 getClassContext를 부르면 될 것 같은데 protected다.

클래스 재정의해서 내부 블럭을 이용하면 같은 패키지처럼 이용할 수 있다.

그런데 이런 식으로 부르는게 맞는 지 모르겠다.

+ Recent posts