Java Reference
In-Depth Information
erzeugte Bean-Objekt selbst sowie sein Name übergeben. Die Methode kann dann zum Bei-
spiel das Objekt in irgendeiner Form manipulieren (zum Beispiel weitere anwendungs-
abhängige Initialisierungen durchführen). Entscheidend ist, dass das Spring-Framework im
Folgenden das Objekt benutzt, das von den Methoden der BeanPostProcessor-Schnittstelle
zurückgegeben wird. Wenn also eine Methode das Objekt zurückgibt, das es als Parameter
übergeben bekommen hat, dann wird im Folgenden tatsächlich das Objekt verwendet, das
vom Spring-Framework erzeugt wurde. Eine Methode eines BeanPostProcessors kann aber
auch ein ganz anderes Objekt zurückgeben. Im Folgenden wird dann dieses Objekt benutzt
statt desjenigen, das das Spring-Framework angelegt hat. Der typische Anwendungsfall für
einen solchen Fall ist die Zurückgabe eines Proxy-Objekts für das eigentliche Bean-Objekt.
Damit wird die in den folgenden Abschnitten behandelte aspektorientierte Programmie-
rung in Spring realisiert. Dies ist der Grund, warum das Thema BeanPostProcessor in die-
sem Buch überhaupt behandelt wird.
Wie in Listing 14.6 zu sehen ist, gibt es zwei Methoden, die ein BeanPostProcessor imple-
mentiert und die beide nach der Erzeugung einer Spring-Komponente aufgerufen werden.
Um zu verstehen, warum es zwei Methoden sind, muss erklärt werden, dass auf einem
Bean-Objekt nach seiner Erzeugung und der vom Spring-Framework durchgeführten
Dependency Injection auch noch Initialisierungsmethoden ausgeführt werden können (z. B.
durch Angabe des Namens einer Methode als „init-method“ im Tag <bean>). Die Methode
postProcessBeforeInitialization wird — wie der Name sagt — vor dem Aufruf einer solchen
Initialisierungsmethode aufgerufen und postProcessA erInitialization danach. Beim Auf-
ruf beider Methoden wurde die Dependency Injection für die betreff ende Spring-Kompo-
nente aber bereits durchgeführt. Da wir in diesem Buch keine Initialisierungsmethoden
haben, werden bei uns die Methoden direkt hintereinander aufgerufen. Im Folgenden wer-
den wir uns deshalb nur auf eine der beiden Methoden konzentrieren.
In unserer Anwendung verwenden wir die Komponenten Counter und Hello aus der ersten
und zweiten Anwendung (Abschnitte 14.2 und 14.3) wieder. Wir fügen lediglich einen Bean-
PostProcessor hinzu. Durch unseren BeanPostProcessor soll demonstriert werden, dass
zum einen ein Objekt durch einen BeanPostProcessor noch verä ndert werden kann und
dass zum anderen der BeanPostProcessor ein ganz anderes Objekt sogar einer anderen
Klasse zurückliefern kann. In unserem BeanPostProcessor wird geprü , ob es sich bei dem
übergebenen Bean-Objekt um ein Hello-Objekt handelt. In diesem Fall wird über setGree-
ting der in der XML-Konfi gurationsdatei angegebene Wert verändert. Wenn der BeanPost-
Processor feststellt, dass er ein Counter-Objekt erhalten hat, erzeugt er rein aus Demonstra-
tionsgründen ein Objekt der Klasse DoubleCounter (s. Listing 14.7), die in Zweierschritten
zählt.
Listing 14.7 Klasse DoubleCounter
package javacomp.spring.postprocessor;
import javacomp.spring.counter.Counter;
public class DoubleCounter extends Counter
{
public void increment()
{
super.increment();
 
Search WWH ::




Custom Search