2013-10-30 3 views
0

자바 필드 할당 작업을 기록/모니터링하는 방법; 예를 들어, 할당 작업 전이나 후에 몇 가지 기능을 추가하고 싶습니다.자바 필드 할당 작업을 기록/모니터링하는 방법

원래 코드 :

class Test{ 
public String name; 

public void operation{ 
      .... some code ... 
     name="stackoverflow"; 
      .... some code ... 
    } 
} 

코드를 변경 한 후 :

class Test{ 
public String name; 
public void operation{ 
      .... some code ... 
     [[ my instrument code ]] 
     name="stackoverflow"; 
     [[ my instrument code ]] 
      .... some code ... 
    } 
} 

NOTE: 내가 전이나 모든 제출 할당 줄 끝에서 악기로 원하는; 그래서 어떤 선이 도구가되어야하는지 지적 할 수는 없다. JAVA DEBUG INTERFACE를 사용하면 가능한가? 또는 그것에 도달 할 수있는 방법이 있습니까? INSTrument 또는 Dynamic Proxy

답변

1

javassist를 사용하여이를 수행 할 수 있습니다. 필드에는 작동하지만 배열에는 작동하지 않습니다. 내 빠른 직렬화 구조체 시뮬레이션에 그런 일을했을 :

method.instrument(new ExprEditor() { 
         @Override 
         public void edit(FieldAccess f) throws CannotCompileException { 
          try { 
           if (! f.isStatic()) { 
            CtClass type = null; 
            type = f.getField().getType(); 
            FSTClazzInfo.FSTFieldInfo fieldInfo = clInfo.getFieldInfo(f.getFieldName(), null); 
            if (fieldInfo == null) { 
             return; 
            } 
            if (f.isReader()) { 
             structGen.defineStructReadAccess(f, type, fieldInfo); 
            } else if (f.isWriter()) { 
             structGen.defineStructWriteAccess(f, type, fieldInfo); 
            } 
           } 
          } catch (Exception e) { 
           e.printStackTrace(); 
          } 
         } 
        }); 

https://code.google.com/p/fast-serialization/source/browse/trunk/src/main/java/de/ruedigermoeller/heapoff/structs/unsafeimpl/FSTStructFactory.java

에서