이 예제는 staticField 데이터 항목 및 StaticInitializer 프로브 단편의 사용을 예시합니다.
이 예제에서 프로브는 클래스 인스턴스 작성 시의 트랙을 보존합니다. 해당 클래스의 이전 인스턴스가 작성되고 2초 이상 지난 후 인스턴스가 작성되면 프로브가 로그 메시지를 씁니다.
이 프로브는 staticField를 사용하여 프로브된 모든 클래스에 새 정적 필드를 작성합니다. 이와 달리 fragmentAtClassScope를 사용하여 Date 필드를 선언할 경우, 프로브가 적용되는 클래스 수에 관계없이 프로브 단편을 보유하는 생성된 클래스에 단일 Date 인스턴스가 나타나게 됩니다. 프로브된 각 클래스의 인스턴스 작성 간의 지연을 추적하는 대신, 프로브된 모든 클래스의 인스턴스 작성 간의 시간 지연을 추적하려는 경우 이를 수행할 수 있습니다.
이 예제 코드를 사용하려면 대상 오브젝트에 있는 package="com.sample*"을 실제 패키지 이름으로 참조하도록 변경하십시오.
XML에서 & 및 < 문자를 사용하려면 예제에 표시된 대로 문자 엔티티 & 및 <를 지정해야 합니다.
<?xml version="1.0" encoding="ASCII"?> <probekit> <probe> <target type="include" package="com.sample*" method="<init>" /> <target type="exclude" package="*" /> <staticField type="java.util.Date"/> <fragment type="entry"> <data name="lastInstanceDate" type="staticField"/> <data name="clname"/> <code> java.util.Date d = new java.util.Date(); long now = d.getTime(); long prev = lastInstanceDate.getTime(); if (prev != 0 && prev + 1000 < now) { System.out.println("[" + clname + " instance after > 1 second]"); } lastInstanceDate.setTime(now); </code> </fragment> <fragment type="staticInitializer"> <data name="lastInstanceDate" type="staticField"/> <data name="clname"/> <code> lastInstanceDate.setTime(0); System.out.println("[" + clname + " class loaded]"); </code> </fragment> </probe> </probekit>
상위 주제: Probekit 예제