LoadTimeWeaving AspectJ

larlibu

Mitglied
Hallo,

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;
 }
}
Die Klasse Addresse besitzt die üblichen Attribute Strasse, Ort, u.s.w
Code:
class Addresse{
private String ort;
private String strasse;
...

public String getOrt() {
 return ort;
 }

}
In meiner aop.xml sind die beiden wie folgt konfiguriert:
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]
...
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
 

larlibu

Mitglied
Hallo mvitz,

du hast natürlich Recht -> Schreibfehler meinerseits.
addresseGetOrt() soll natürlich da stehen.
Funktioniert aber trotzdem nicht.

Habe auch schon direkten Feldzugriff per get mit
Code:
@Pointcut("get(String Addresse.ort)")

versucht, aber auch kein Erfolg!
 

mvitz

Top Contributor
Bin mir nicht mehr sicher, kann aber evtl. was mit execution vs. call zu tun haben, habe da was ganz tief im Kopf, dass das was mit dem Aufruf zu tun hat. Sinnvoll wäre evtl. noch dein Testprogramm zu sehen, dann kann evtl. auch noch jemand anderes helfen.
 

larlibu

Mitglied
Hallo mvitz,

habe das Problem gelöst...es fehlte lediglich die Annotation @configurable an meiner Klasse Addresse!

Trotzdem vielen Dank für deine Hilfe!

larlibu
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Klasse String erweitern mit AspectJ Application Tier 8

Ähnliche Java Themen

Neue Themen


Oben