Java Reference
In-Depth Information
message += ", ";
}
}
message += ")";
System.out.println("vor " + message);
Object result;
try
{
result = invocation.proceed();
}
catch(Throwable t)
{
System.out.println("Ausnahme " + t + " in " + message);
throw t;
}
if(m.getReturnType()==void.class)
{
System.out.println("nach " + message);
}
else
{
System.out.println("nach " + message + " => " + result);
}
return result;
}
}
Auch wenn man proceed ausgeführt hat, ist man nicht verpfl ichtet, das Ergebnis der „eigent-
lichen“ Methode an den Aufrufer zurückzugeben. Man kann „unliebsame“ Ergebnisse auch
austauschen. Ähnlich verhält es sich mit geworfenen Ausnahmen; man kann eine andere
Ausnahme werfen oder die geworfene Ausnahme ganz unterdrücken. In dem Logging-Bei-
spiel machen wir aber davon keinen Gebrauch. Es wird nach einer Protokollierung immer
das von proceed errechnete Ergebnis zurückgegeben bzw. genau die geworfene Ausnahme
erneut ausgelös t .
Als Anwendung können wir wieder die Hello- und Counter-Komponenten verwenden. In der
XML-Konfi gurationsdatei müssen wir zusätzlich die Advice-Komponente (s. Listing 14.9),
den Pointcut und den Advisor bestehend aus Advice und Pointcut defi nieren. Sowohl für
den Pointcut als auch für den Advisor benutzen wir vom Spring-Framework vorgegebene
Klassen. Der Pointcut wird so parametrisiert, dass er alle Methodenaufrufe in Klassen,
deren Package-Namen mit javacomp.spring beginnt, umfasst. Schließlich benötigen wir
noch einen BeanPostProcessor, der beim Erzeugen von Objekten den Advice-Code mit Hilfe
dynamischer Proxies „einwebt“. Die XML-Konfi gurationsdatei sieht damit wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean id="counter" class="javacomp.spring.counter.Counter">
</bean>
<bean id="hello" class="javacomp.spring.hello.Hello">
<property name="greeting" value="Hallo"/>
<property name="counter" ref="counter"/>
</bean>
 
Search WWH ::




Custom Search