이 예제는 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 예제