JSF + Spring / AOP

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • JSF + Spring / AOP

    Hi,

    ich habe ein kleines Problem, wenn ich versuche JSF mit Springs AOP auszufuehren.
    Hier ist ersteinmal meine spring.xml:
    Code:

    Quellcode

    1. <beans>
    2. <!-- Bean Classes -->
    3. <bean id="beanTarget" class="BusinessLogic" />
    4. <!-- Advice classes -->
    5. <bean id="theTracingBeforeAdvice" class="TracingBeforeAdvice" />
    6. <!-- Bean Config -->
    7. <bean id="businesslogicbean" class="org.springframework.aop.framework.ProxyFactoryBean">
    8. <property name="proxyInterfaces">
    9. <value>IBusinessLogic</value>
    10. </property>
    11. <property name="target">
    12. <ref local="beanTarget" />
    13. </property>
    14. <property name="interceptorNames">
    15. <list>
    16. <value>theTracingBeforeAdvisor</value>
    17. </list>
    18. </property>
    19. </bean>
    20. <!-- Advisor pointcut defintion for before advice -->
    21. <bean id="theTracingBeforeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" >
    22. <property name="advice">
    23. <ref local="theTracingBeforeAdvice" />
    24. </property>
    25. <property name="pattern">
    26. <value>.*</value>
    27. </property>
    28. </bean>
    29. </beans>
    Alles anzeigen


    In der BusinessLogik-Klasse gibt es eine Funktion, die ich aufrufe, wenn in meiner faces-Datei ein command-Button gedrueckt wird:

    Code:

    Quellcode

    1. <h:commandButton action="#{beanTarget.foo}"/>


    In der foo-Funktion wir System.out.println aufgerufen.

    Die TracingBeforeAdvice implementiert die Schnittstelle org.springframework.aop.MethodBeforeAdvice und somit auch die Funktion before(....). Auch hier wird System.out.println(...) aufgerufen.

    Mein Problem ist jetzt, dass die Methode foo zwar aufgerufen wird, die Funktion before aber nicht...

    Ich habe das Beispiel von http://www.onjava.com/pub/a/onjava/2004/07/14/springaop.html, habe aber das AfterReturningAdvice weggelassen...


    Hat hier jemand erfahrung mit AOP und evtl. eine Idee

    Danke schonmal im Vorraus
  • Ich hatte mir das Thema gebookmarkt, weil wir erst die letzte Woche Vorlesungen zu JSF hatten.
    Aber nach Google-Recherchen wurde dein Problem wohl schon in einem anderen Forum gelöst:

    Um die Lösung auch hier nicht vorzuenthalten:

    Quellcode

    1. <h:commandButton action="#{businesslogicbean.foo}"/>


    Wenn man jetzt die Lösung sieht ist es eigentlich ganz logisch. Es ist eben ein Proxy Pattern.
    Du arbeitst nicht auf beanTarget, sondern schaltest die Proxy Klasse davor, die dir eine weitere Möglichkeit bietet auf der targetBean zu arbeiten.
    Das macht man ja auch häufig, wenn man eine kommerzielle Klasse mit hässlichen Schnittstellen bekommt. Man zimmert seine eigenen einfach drumherum.