esempi di staticField e di staticInitializer

Questo esempio descrive l'utilizzo dell'elemento di dati staticField e del frammento probe staticInitializer.

In questo esempio, un probe tiene traccia del momento in cui vengono create le istanze di una classe. Se un'istanza di una classe viene creata più di un secondo dopo l'istanza precedente, il probe scrive un messaggio di registro.

Di seguito vengono riportate le operazioni compiute dal probe:
  1. Utilizzando l'elemento di dati staticField, il probe crea un campo statico di tipo Date in ciascuna delle classi con probe. Il campo statico verrà inizializzato richiamando new Date();.
  2. Nel frammento staticInitializer, il probe imposta l'istanza di Date di una classe con probe su "time zero" (gennaio 1970) al momento del caricamento.
  3. Nel frammento entry (a causa delle regole di destinazione, il frammento entry viene eseguito solo nei costruttori), il probe controlla quando è stato eseguito l'ultimo aggiornamento e produce un report se l'aggiornamento è stato eseguito più di un secondo prima.
  4. Infine, il probe aggiorna l'istanza di Date su "now."

Questo probe utilizza l'elemento di dati staticField per creare un nuovo campo statico in ciascuna delle classi con probe. Diversamente, se si utilizzasse fragmentAtClassScope per dichiarare il campo Date, una singola istanza di Date comparirebbe nella classe generata che contiene i frammenti probe, indipendentemente dal numero di classi a cui il probe è stato applicato. È possibile adottare questo approccio se si desidera tener traccia dell'intervallo di tempo tra una creazione di istanza e l'altra di tutte le classi con probe, piuttosto che tener traccia del medesimo intervallo per ciascuna delle classi con probe.

Per utilizzare questo codice di esempio, sostituire package="com.sample*" nell'oggetto di destinazione di un pacchetto vero e proprio.

Inoltre, per utilizzare i caratteri & e < in XML, è necessario specificare le entità di carattere &amp; e &lt;, come mostrato nell'esempio.

<?xml version="1.0" encoding="ASCII"?>
<probekit>
  <probe>
    <target type="include" package="com.sample*" method="&lt;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 &amp;&amp; prev + 1000 &lt; 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>

Argomento principale: Esempi di Probekit

Riferimenti correlati
Oggetto probe StaticField
Frammento probe staticInitializer

Copyright IBM Corporation e altri 2000, 2004.