Este exemplo demonstra a utilização do artigo de dados staticField e do fragmento de sonda staticInitializer.
No exemplo, a sonda mantém registo do momento de criação de instâncias de uma classe. Se uma instância for criada mais de um segundo após a instância anterior dessa classe, a sonda escreve uma mensagem no ficheiro de registo.
Eis o que esta sonda realiza:
- Com a definição de campo estático, a sonda cria um campo estático do tipo Data em cada classe sondada. O campo estático será inicializado chamando new Date();.
- No fragmento staticInitializer, a sonda define a instância de Data de uma classe sondada como "hora zero" (Janeiro de 1970) quando for carregada.
- No fragmento de entrada, a sonda verifica se foi efectuada a actualização anterior, e emite um relatório se esta tiver sido efectuada há mais de um segundo. (Dadas as regras de destino, o fragmento de entrada só é executado em construtores.)
- Por fim, a sonda actualiza o valor da instância de Data, passando a ser "agora".
A sonda utiliza a definição do campo estático para criar um novo campo estático em cada classe sondada. Comparativamente, ao utilizar um fragmento no âmbito da classe para declarar o campo Data resultaria numa única instância de Data a aparecer na classe gerada que retém os fragmentos de sonda, sejam quantas forem as classes a que a sonda está aplicada. Poderá optar por esta hipótese se quiser acompanhar o diferimento entre a criação de instâncias de qualquer classe sondada, em vez de acompanhar o diferimento entre a criação de instâncias de cada classe sondada.
Esta sonda define-se pelas seguintes entradas no editor do Probekit:
- Tipo totalmente qualificado Java para campo estático (faça clique com o botão direito do rato em Sonda na área de janela em árvore e depois faça clique em para introduzir este valor):
java.util.Date
- Destino (para introduzir estes valores, seleccione Destino na área de janela em árvore e depois faça clique em Editar):
- Tipo de Destino: include
- Pacote:
com.sample* (Utilize um verdadeiro nome de pacote
aqui.)
- Classe: *
- Método: <init>
- Assinatura do Método: *
- Destino (para introduzir estes valores, faça clique em Adicionar e depois em Editar na área de janela de edição):
- Tipo de Destino: exclude
- Pacote: *
- Classe: *
- Método: *
- Assinatura do Método: *
- Fragmento (seleccione Fragmento na área de janela em árvore para introduzir estes valores):