Spring AOP coupe transverse (pointcut) avec un argument
J'ai besoin de créer un aspect que je trouve difficile à décrire, alors permettez-moi de souligner les idées:
- tout méthode à l'intérieur de l'emballage (ou tout sous-paquetage) de com.x.y...
- un argument de méthode est une implémentation d'une interface javax.portlet.PortletRequest
- il peut m'en plus des arguments dans la méthode
- ils peuvent être dans n'importe quel ordre
J'ai besoin d'une coupe transverse (pointcut) et un "autour" des conseils avec la PortletRequest donné
Actuellement, j'ai smt comme:
@Pointcut("execution(* com.x.y..*.*(PortletRequest,..)) && args(request,..)")
public void thePointcut(PortletRequest request) {
}
@Around("thePointcut(request)")
public Object theAdvice(ProceedingJoinPoint joinPoint, PortletRequest request) {
...
et un message d'erreur:
ERREUR 10:47:27.159 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] o.s.web.portlet.DispatcherPortlet - Contexte
échec de l'initialisation de
org.springframework.les haricots.usine.BeanCreationException: Erreur lors de la création de haricots avec le nom " org.springframework.web.servlet.
mvc.HttpRequestHandlerAdapter': Initialisation du bean n'a pas; nested exception java.lang.IllegalArgumentException: w
arning pas de match pour ce type nom: PortletRequest [Xlint:invalidAbsoluteTypeName]
Toute aide très appréciée
Salutations,
Dan
Mise à JOUR
la méthode que je suis en train d'essayer d'intercepter est:
dans public class com.x.y.MainClass :
public String mainRender(Model model, RenderRequest request) throws SystemException
dans public class com.x.y.tsa.HelpClass:
public final void helpAction(ActionRequest request, ActionResponse response, Model model)
De cource, je veux trouver l'argument qui implémente PortletRequest, c'est-à RenderRequest de la première méthode, et ActionRequest à partir de la deuxième.
Ce qui concerne,
Dan
OriginalL'auteur Queequeg | 2011-10-18
Vous devez vous connecter pour publier un commentaire.
Que l'erreur suggère que vous devez utiliser le nom complet de la PortletRequest dans le point de couper expression - car c'est une chaîne à l'importation contexte n'est pas disponible pendant le temps de l'évaluation de l'expression.
Puisque vous avez déjà sélectionné le type dans le args construire vous n'en avez pas besoin dans la signature. Les éléments suivants doivent également fonctionner.
C'est un booléens et de fonctionnement - c'est à dire, il doit correspondre à la méthode du modèle ainsi que les arguments de construire.
Les deux méthodes les ou seulement le mainRender méthode. La façon dont vous avez défini le point de le couper ne correspondent à ceux des méthodes où le premier paramètre est PortletRequest. Vous pouvez essayer quelque chose comme args(..,demande,..) - ne sais pas si cela fonctionnerait. Vous pouvez également réorganiser les arguments de manière à avoir le PortletRequest comme premier argument.
J'aimerais attraper toute méthode avec un PortletRequest entre les paramètres, et d'avoir accès à la demande.
ok, avez-vous essayer le args(..,demande,..) ?
Malheureusement, args(..,demande,..) ne fonctionne pas. N'ont pas été en mesure de venir avec une alternative encore.
OriginalL'auteur gkamal