2013-02-14 4 views
0

내 조회는 ASM을 사용하는 바이트 코드 조작과 관련됩니다.ASM 바이트 코드 조작을 사용하여 메소드에서 정적 호출로 랩핑 생성자 호출

은 다음과 내가 하나 개의 방법이 - 위의 방법에서

/*Original method code*/ 
String str ="abs";  
// create object of SampleClass2 // constructor calling 
SampleClass2 sample = new SampleClass2(); 
// call instance method   
sample.PrintMe(str); 

을 좀 로직을 수행 한 후 같은 SampleClass2 객체를 반환합니다 하나의 정적 메소드 호출에 SampleClass2() 생성자를 변경하고 싶습니다. 그래서 그 후 내 방법은 이런 식으로 보일 것입니다.

/* 
* After bytecode manipulation* 
*/ 
String str ="abs"; 
// get a constructor using static call 
SampleClass2 sample = StaticClass.getSampleClass2Object(); 
sample.PrintMe(str); 

어떻게하면 ASM 바이트 코드 조작을 사용하여 달성 할 수 있는지 말해주십시오. 기존의 바이트 코드 스택을 동일하게 변경해야합니까? DUP

답변

0

주된 문제점은 객체가 생성자를 호출 한 다음 "new"명령어로 처음 생성된다는 것입니다. 달성하기 어려울 수있는 "new"와 생성자 호출을 모두 바꾸어야합니다. 도로를 따라 가려면 ASM 문서의 8 장 (트리 API -> 메소드 분석) 115 페이지를 확인하십시오.

하지만 충분하다면 정적 메서드에 대한 호출을 추가하여 인스턴스화 논리를 간단하게 수행 할 수 있습니다. 이는 매우 간단합니다. 그냥 생성자 호출을 찾아서 나중에 메서드에 정적 호출을 추가합니다.이 메서드는 매개 변수로 SampleClass2를 사용하고 SampleClass2 (아마도 같은 인스턴스)를 반환합니다.

+0

감사합니다. –