Question

Mon projet est basé sur le framework spring 2.5.4.Et j'essaie d'ajouter les aspects pour certains contrôleurs (j'utilise aspectj 1.5.3).

J'ai activé l'auto-proxy dans application-servlet.xml, venez de coller ces lignes à la fin du fichier xml:

<aop:aspectj-autoproxy />
<bean id="auditLogProcessor" class="com.example.bg.web.utils.AuditLogProcessor" />

Créé aspect:

package com.example.bg.web.utils;

import org.apache.log4j.Logger;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class AuditLogProcessor
{
    private final static Logger log = Logger.getLogger(AuditLogProcessor.class);

    @After("execution(* com.example.bg.web.controllers.assets.AssetThumbnailRebuildController.rebuildThumbnail(..))")
    public void afterHandleRequest() {
        log.info("test111");
    }

    @After("execution(* com.example.bg.web.controllers.assets.AssetThumbnailRebuildController.rebuildThumbnail(..))")
    public void afterRebuildThumbnail() {
        log.info("test222");
    }
}

Mon contrôleurs:

class AssetAddController implements Controller
class AssetThumbnailRebuildController extends MultiActionController

Lorsque j'ai mis du frein de points dans l'aspect de conseillers et d'invoquer les contrôleurs de je ne capturent que afterHandleRequest (), mais pas afterRebildThumbnail() Qu'ai-je fait de mal?

NOTE

Je vous pose cette question au nom de mon ami qui n'a pas accès à DONC beta, et je n'ai pas la moindre idée de ce dont il s'agit.

MODIFIER

Il y avait en effet quelques fautes d'orthographe, merci Cheekysoft.Mais le problème persiste encore.

Était-ce utile?

La solution

Vos points d'arrêt ne sont pas touchés parce que vous êtes à l'aide de Spring AOP Procurations.Voir compréhension-aop-procurations pour une description de la façon dont AOP Procurations sont spéciales.

Fondamentalement, le framework MVC va appeler la handleRequest méthode sur votre contrôleur de proxy (qui, par exemple, l' MultiActionController vous êtes à l'aide de la classe de base des outils), cette méthode va ensuite faire un "interne" appel à ses rebuildThumbnail méthode, mais cela ne peut pas passer par le proxy, et donc de ne pas ramasser tous les aspects.(Cela n'a rien à voir avec les méthodes final.)

Pour atteindre ce que vous voulez, étudier à l'aide de "réel" de l'AOP par temps de chargement de tissage (qui Ressort supporte très bien).

Autres conseils

AspectJ ne fonctionne pas bien avec les classes dans le Web Spring MVC. Lire le bas de la "Ouvert pour l'extension..." la boîte sur le côté droit de la page

Au lieu de cela, jetez un oeil à la HandlerInterceptor de l'interface.

La nouvelle Spring MVC Annotations peuvent fonctionner aussi bien depuis les classes de Contrôleur sont tous les objets Pojo, mais je n'ai pas essayé moi-même.

La configuration de base semble ok.

La syntaxe peut être simplifié légèrement en ne définissant pas une coupe transverse (pointcut) et juste en précisant la méthode à laquelle l'après-conseils doivent être appliquées.(Le nommé pointcuts pour les méthodes sont créés automatiquement pour vous.)

par exemple

@After( "com.example.bg.web.controllers.assets.AssetAddController.handleRequest()" )
public void afterHandleRequest() {
    log.info( "test111" );
}

@After( "com.example.bg.web.controllers.assets.AssetThumbnailRebuildController.rebuildThumbnail()" )   
public void afterRebuildThumbnail() {
    log.info( "test222" );
}

Tant que le rebuildThumbnail méthode n'est pas définitive, et le nom de la méthode et de la classe sont corrects.Je ne vois pas pourquoi cela ne fonctionne pas.

voir http://static.springframework.org/spring/docs/2.0.x/reference/aop.html

Est-ce aussi simple que de l'orthographe?ou il y a juste des fautes de frappe dans la question?Parfois, vous écrivez rebuildThumbnail et parfois, vous écrivez rebildThumbnail

Les méthodes que vous essayez de remplacer les conseils ne sont pas des méthodes du framework MVC, alors qu'bpapas réponse est utile, ma compréhension, c'est que ce n'est pas le problème dans ce cas.Cependant, assurez-vous que la rebuildThumbnail contrôleur de l'action n'est pas définitive

@bpapas:s'il vous plaît corrigez-moi si je me trompe.Le programmeur de la propre action de contrôleur est ce qu'il tente de remplacer.En regardant les MultiActionController source (et ses parents) le seul finalisé méthode potentiellement dans la pile est MultiActionController.invokeNamedMethod, bien que je ne suis pas sûr à 100% si ce serait dans la pile à l'heure ou pas.Une finalisé méthode plus haut dans la pile de provoquer un problème de l'ajout de l'AOP conseils pour une méthode plus bas?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top