Java Reference
In-Depth Information
<bean id="interceptorAdvice"
class="javacomp.spring.aop.LoggingInterceptorAdvice"/>
<bean id="loggingPointcut"
class="org.springframework.aop.aspectj.AspectJExpressionPointcut">
<property name="expression"
value="execution(* javacomp.spring.*.*.*(..))"/>
</bean>
<bean id="loggingAdvisor"
class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="interceptorAdvice"/>
<property name="pointcut" ref="loggingPointcut"/>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.Default-
AdvisorAutoProxyCreator"/>
</beans>
Der BeanPostProcessor erzeugt Proxies und liefert diese statt der „eigentlichen“ Objekte
zurück. Eine Anwendung, die sich über getBean die Komponente mit dem Namen „hello“
bescha , erhält somit das entsprechende Proxy-Objekt zurück. Aber auch bei der Depen-
dency Injection wird statt des Objekts mit dem Namen „counter“ ein Proxy geliefert und als
Attributwert im Hello-Objekt gespeichert. Es werden damit alle Aufrufe wie gewünscht pro-
tokolliert. Eine Anwendung, die sich über getBean die Spring-Komponente mit dem Namen
„hello“ bescha und darauf die Methode sayGreeting mit dem Parameter „Welt“ aufru ,
erzeugt folgende Ausgabe:
vor Aufruf von javacomp.spring.hello.Hello.sayGreeting(Welt)
vor Aufruf von javacomp.spring.counter.Counter.increment()
nach Aufruf von javacomp.spring.counter.Counter.increment() => 1
vor Aufruf von javacomp.spring.counter.Counter.get()
nach Aufruf von javacomp.spring.counter.Counter.get() => 1
Hallo Welt (1)
nach Aufruf von javacomp.spring.hello.Hello.sayGreeting(Welt)
Eine Advice-Klasse muss nicht notwendig die Schnittstelle MethodInterceptor implementie-
ren. Alternativ kommen auch die folgenden Schnittstellen in Frage:
! MethodBeforeAdvice: Die Methode before dieser Schnittstelle wird vor dem „eigentlichen“
Methodenaufruf ausgeführt. Danach wird ohne Zutun des Advice-Codes die „eigentliche“
Methode aufgerufen; es sei denn, die Methode before hat eine Ausnahme ausgelös t .
! A erReturningAdvice: Die Methode a erReturning dieser Schnittstelle wird nach dem
„eigentlichen“ Methodenaufruf ausgeführt; es sei denn, die „eigentliche“ Methode hat
eine Ausnahme ausgelöst. Der Rückgabewert der „eigentlichen“ Methode kann in diesem
Fall im Gegensatz zu MethodInterceptor nicht geändert werden, denn er wird ohne Zutun
des Advice-Codes an den Aufrufer zurückgeliefert.
! ThrowsAdvice: Die Methoden dieses Advice werden ausgeführt, falls im „eigentlichen“
Methodenaufruf eine Ausnahme ausgelöst wurde.
In einer Anwendung können mehrere Advisors defi niert werden. Dabei kann ein und der-
selbe Advice in mehreren Advisors vorkommen. Dasselbe gilt für einen Pointcut.
 
Search WWH ::




Custom Search