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


@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다.

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

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

jvm이 실제로 class를 어떤 식으로 실행하는 지 학인 할 수 있다.

자바소스를 java bytecode라는 것으로 보면 된다.

javap -c 클래스이름

을 실행하면 java bytecode가 나온다.

어셈블리어에 좀 더 가까운 코드를 볼 수 있다.


실무에서는 이런 식으로 확인하는 건 상당히 귀찮은 일이므로 ide에 플러그인을 깔면 편하다.

이클립스 같은 경우 현재 market place에서 설치하는 건 버전 호환때문에 에러 나는 분들이 많을 것이다.

install new software 를 이용해서 

http://andrei.gmxhome.de/eclipse/

주소를 적으면

여러 플러그인이 나오는데 이클립스 버전에 맞는 Bytecode Outline을 찾아서 설치하면 된다.

show view에서 Bytecode를 찾아서 창을 열면 

바로바로 전환되는 bytecode를 볼 수 있다.


속도 향상에 관심이 있다면 이걸로 코드를 비교해보면 좋다.


'Java' 카테고리의 다른 글

java concurrent와 stream(동시성 문제)  (0) 2018.04.01
Java Applet ReflectPermission  (0) 2018.03.28
Java Applet 이런 젠장  (0) 2018.03.28
BigDecimal을 사용하는 이유  (0) 2018.03.18
autoclose resource : try-with-resource  (0) 2018.03.09

Applet 실행하는데 보안상 위험한 곳에 접근 하려고 한다고 경로를 막 뱉으면서 버벅인다.


그러더니 에러가 발생


jackson으로 json컨버트 하는데서 에러가 발생했다.

access denied("java.lang.reflect.ReflectPermission" )


reflection이 파일로 접근하는 건줄 몰랐다.

reflection으로 함수형 프로그램을 흉내내도 실제 함수형 프로그램과는 멀다는 이야기네...


https://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html

'Java' 카테고리의 다른 글

java concurrent와 stream(동시성 문제)  (0) 2018.04.01
java bytecode  (0) 2018.04.01
Java Applet 이런 젠장  (0) 2018.03.28
BigDecimal을 사용하는 이유  (0) 2018.03.18
autoclose resource : try-with-resource  (0) 2018.03.09

+ Recent posts