|
Publicité | ||||||||||||||||||||||
|
|
#1 | ||||
![]() ![]() |
Bonjour,
Je voudrais utiliser Spring AOP sur la méthode securedActionListener suivante dans une classe abstraite nommée AbstractSecuredBean , cette classe utilise des generics and le code est : Code java :
J'ai créé un advice Around avec le point de coupe suivant : Code java :
Et jamais durant l'execution cet advice est exécuté, auriez vous une idée ? Merci d'avance pour vos idées,
__________________
Cordialement, elitost(Eric Reboisson) SpringSource Certified Spring Professional Certifié SCWCD J2EE 5.0 Certifié SCJP J2SE 5.0 Certifié ITIL Foundation Responsable : FAQ Maven 2 , FAQ SCM Autres : Site web Developpez , Mon site personnel , Mon CV Twitter : Suivez moi sur Twitter |
||||
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : octobre 2004 Messages : 4 671 ![]() |
Salut,
Peut être que ça vient du fait que le type que tu références dans le pointcut, le "AbstractSecuredBean" n'est jamais instancié, mais plutôt ses descendants. Ca donne quoi en remplaçant par le(s) type(s) concret(s) ? voire par un * |
|
|
00
|
|
|
#3 |
![]() ![]() |
En remplaçant par un type concret CreateProductFormBean (cf. hiérarchie des classes en pièce jointe) l'advice devient donc :
Code java :
@Around("execution(* com.application.view.bean.docinfo.CreateProductFormBean.securedActionListener(..))") Et avec le caractère * : Code java :
@Around("execution(* com.application.view.bean.docinfo.*.securedActionListener(..))") Dans les deux cas, je ne passe pas dans l'advice mais en debug je passe bien dans securedActionListener. D'autres idées ? Y aurait il un problème avec l'utilisation des types génériques ? Merci d'avance pour vos idées.
__________________
Cordialement, elitost(Eric Reboisson) SpringSource Certified Spring Professional Certifié SCWCD J2EE 5.0 Certifié SCJP J2SE 5.0 Certifié ITIL Foundation Responsable : FAQ Maven 2 , FAQ SCM Autres : Site web Developpez , Mon site personnel , Mon CV Twitter : Suivez moi sur Twitter |
|
00
|
|
|
#4 | |
![]() ![]() |
Une question avant d'aller plus loin, en lisant la doc de reference pour Spring 2.5 http://static.springframework.org/sp...rence/aop.html
Je lis : Citation:
Am I right ? Si c'est vrai , quelles sont les solutions ? configuré la classe en bean ou utiliser AspectJ ?) Merci d'avance
__________________
Cordialement, elitost(Eric Reboisson) SpringSource Certified Spring Professional Certifié SCWCD J2EE 5.0 Certifié SCJP J2SE 5.0 Certifié ITIL Foundation Responsable : FAQ Maven 2 , FAQ SCM Autres : Site web Developpez , Mon site personnel , Mon CV Twitter : Suivez moi sur Twitter |
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() Inscription : septembre 2006 Messages : 2 245 ![]() |
Citation:
AspectJ est la solution la plus puissante pour s'affranchir des limitations… |
|
|
|
00
|
|
|
#6 |
![]() ![]() |
Bon, je vais allez voir demain le concepteur et négocier avec lui pour beaner tout ça sinon AspectJ...
D'autres idées ? conseils ? avant que je résolve... Bonne fin de week end
__________________
Cordialement, elitost(Eric Reboisson) SpringSource Certified Spring Professional Certifié SCWCD J2EE 5.0 Certifié SCJP J2SE 5.0 Certifié ITIL Foundation Responsable : FAQ Maven 2 , FAQ SCM Autres : Site web Developpez , Mon site personnel , Mon CV Twitter : Suivez moi sur Twitter |
|
00
|
|
|
#7 |
|
Membre habitué
![]() ![]() Inscription : juillet 2007 Messages : 145 ![]() |
Je te confirme qu'avec Spring AOP, seuls les Beans Spring bénéficient de l'AOP... En même temps c'est un peu normal, vu que ça marche via des proxy JDK : Spring crée un proxy autour de tes objets, et c'est ainsi qu'il rajoute l'AOP.
Pour ton problème précis, tu as en fait un problème sur la définition de ton PointCut : si je comprends bien, tu veux avoir accès à toutes les méthodes des beans qui implémentent AbstractSecuredBean, et pour cela tu peux utiliser le "+" : cf. la doc d'AspectJ http://www.eclipse.org/aspectj/doc/r...pointcuts.html (recherche "subtype patterns"). Ainsi, si tu fais ton pointcut sur "AbstractSecuredBean+", ça devrait marcher. Sinon, le plus simple reste de faire une annotation et de faire ton pointcut dessus. C'est d'ailleurs ainsi que Spring Security fonctionne (avec @Secured ou le @RolesAllowed de la JSR 250, les deux marchent). Les annotations, c'est vraiment super pour faire des pointcuts :-) |
|
00
|
|
|
#8 |
![]() ![]() |
Salut Julien,
Merci pour tes précisions et pour l'astuce du pointcut sur annotation ( un exemple de mise en oeuvre ? (je suis d'humeur paresseuse ce soir) ), je prends note de tout ça et proposerai les diverses options demain. Bonsoir à tous.
__________________
Cordialement, elitost(Eric Reboisson) SpringSource Certified Spring Professional Certifié SCWCD J2EE 5.0 Certifié SCJP J2SE 5.0 Certifié ITIL Foundation Responsable : FAQ Maven 2 , FAQ SCM Autres : Site web Developpez , Mon site personnel , Mon CV Twitter : Suivez moi sur Twitter |
|
00
|
|
|
#9 |
|
Membre habitué
![]() ![]() Inscription : juillet 2007 Messages : 145 ![]() |
Un exemple intéressant : regardons le code même de Spring!! Comme nous venons justement de releaser il y a deux jours le code source de la 3.0M1, je te propose de jeter un coup d'oeil à l'aspect qui gère les transactions, directement dans Subversion :
https://src.springframework.org/svn/...ctionAspect.aj Bien entendu, il ne doit pas y avoir une grosse différence par rapport à Spring 2.5, mais j'aime bien utiliser la dernière version :-) Bref, c'est ainsi que fonctionne l'annotation @Transactionnal, qui permet de rendre une méthode transactionnelle : on fait une "coupe" sur toutes les méthodes qui ont cette annotation. Simple et efficace! Pour les fans des EJBs, je précise que @TransactionAttribute marche tout aussi bien que le @Transactionnal, Spring comprennant les 2 annotations... Enfin, mon exemple précédent sur Spring Security (avec @Secured et @RolesAllowed) est tout à fait valable pour ce même exemple. |
|
00
|
|
|
#10 |
![]() ![]() |
Super, je crois qu'il y a tout ce qu'il faut là.
Merci Julien. Je marque comme résolu et bonne nuit à tous.
__________________
Cordialement, elitost(Eric Reboisson) SpringSource Certified Spring Professional Certifié SCWCD J2EE 5.0 Certifié SCJP J2SE 5.0 Certifié ITIL Foundation Responsable : FAQ Maven 2 , FAQ SCM Autres : Site web Developpez , Mon site personnel , Mon CV Twitter : Suivez moi sur Twitter |
|
00
|
Copyright © 2000-2012 - www.developpez.com