Vous pouvez utiliser le AspectJ avec un tissage en mode chargement (javaagent). Vous pouvez, par exemple, écrire des aspects pour surveiller les appels du constructeur (appel/pointage d'exécution) et surveiller l'accès au champ (set/get pointcuts). J'utilise le développement basé sur des annotations. Par exemple, pour surveiller le réglage de tous les champs et non statiques nontransient dans non définitif de toutes les classes dans le package donné que vous pouvez créer aspect:
@Aspect
public class MonitorAspect {
@Around(" set(!static !final !transient * (*) . *) && args(newVal) && target(t) && within(your.target.package.*) ")
public void aroundSetField(ProceedingJoinPoint jp, Object t, Object newVal) throws Throwable{
Signature signature = jp.getSignature();
String fieldName = signature.getName();
Field field = t.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Object oldVal = field.get(t);
System.out.println("Before set field. "
+ "oldVal=" + oldVal + " newVal=" + newVal + " target.class=" + t.getClass());
jp.proceed();
}
}
en place META-INF aop.xml:
<?xml version="1.0" encoding="UTF-8"?>
<aspectj>
<aspects>
<aspect name="your.package.MonitorAspect" />
</aspects>
</aspectj>
Lieu acpectjrt.jar et aspectjweaver.jar sur classpath et exécutez votre JVM avec le paramètre -javaagent:lib/aspectjweaver.jar
. Voici quelques exemples et documents http://www.eclipse.org/aspectj/doc/released/adk15notebook/ataspectj.html
ok je suis un débutant et se confondre. Pouvez-vous me donner quelques exemples de base pour les aspects que j'ai trouvés vraiment confondre moi. – Ankit
Hey Zach, je n'ai pas complètement eu l'idée d'utiliser aspectj avec javaagent. pouvez-vous me diriger vers une page où je peux voir quelques exemples de base et les essayer moi-même pour avoir une idée de tout cela. – Ankit
@Ankit: s'il vous plaît fournir quelques exemples concrets ce que vous voulez alors je vais vous fournir des exemples de solutions. Et ofc liens :) – zacheusz