Hallo,
eine Frage zu AspectJ und loadTimeWeaving.
Ich habe eine Klasse Kunde mit einem Attribut vom Typ Adresse und einem Attribut vom Typ String.
Die Klasse Addresse besitzt die üblichen Attribute Strasse, Ort, u.s.w
In meiner aop.xml sind die beiden wie folgt konfiguriert:
In meiner Anwendung möchte ich "MeinAspect" ausführen, wenn Kunde.getName() und Kunde.getAddresse().getOrt() ausgeführt wird.
Mein Aspect sieht wie folgt aus:
Der Aspect "MeinAspect" wird bei Kunde.GetName() eingewebt und aufgerufen, aber nicht bei Addresse.getOrt().
In der Consolenausgabe steht folgendes:
Weiß evt. jemand, warum das Address-Objekt nicht gefunden wird oder liegt es an der Art und Weise wie das Address-Objekt aufgerufen wird -> Kunde.getAddresse().getOrt()?
Besten Dank
eine Frage zu AspectJ und loadTimeWeaving.
Ich habe eine Klasse Kunde mit einem Attribut vom Typ Adresse und einem Attribut vom Typ String.
Code:
class Kunde{
private Addresse addresse;
private String name;
...
public Addresse getAddresse() {
return addresse;
}
public String getName() {
return name;
}
}
Code:
class Addresse{
private String ort;
private String strasse;
...
public String getOrt() {
return ort;
}
}
Code:
<!DOCTYPE aspectj PUBLIC
"-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
<weaver options="-showWeaveInfo -verbose -XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler">
<!-- only weave classes in our application-specific packages -->
<include within="Kunde" />
<include within="Addresse" />
</weaver>
<aspects>
<!-- weave in just this aspect -->
<aspect name="MeinAspect" />
</aspects>
</aspectj>
In meiner Anwendung möchte ich "MeinAspect" ausführen, wenn Kunde.getName() und Kunde.getAddresse().getOrt() ausgeführt wird.
Mein Aspect sieht wie folgt aus:
Code:
@Aspect
public class MeinAspect {
@Pointcut("execution(* Kunde.getName())")
void kundeGetName() {
}
@Pointcut("execution(* Addresse.getOrt())")
void addresseGetOrt() {
}
@Around(value = "kundeGetName()")
public Object testGetName(ProceedingJoinPoint pjp) throws Throwable {
return pjp.proceed();
}
@Around(value = "Adresse.getOrt()")
public Object testGetOrt(ProceedingJoinPoint pjp) throws Throwable {
return pjp.proceed();
}
}
Der Aspect "MeinAspect" wird bei Kunde.GetName() eingewebt und aufgerufen, aber nicht bei Addresse.getOrt().
In der Consolenausgabe steht folgendes:
Code:
...
AspectJ Weaver - [AspectJ] Join point 'method-execution(java.lang.String Kunde.getName())' in Type 'Kunde' (Kunde.java:97) advised by around advice from 'MeinAspect' (MeinAspect.java) [AspectJ Weaver]
...
Besten Dank