IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

[AOP] Intercepter une méthode d'une inner class


Sujet :

Spring Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 43
    Points : 28
    Points
    28
    Par défaut [AOP] Intercepter une méthode d'une inner class
    Bonjour,

    J'aimerai savoir s'il est possible d'intercepter les méthodes d'une classe interne. D'une maniere générale, je crée mes actionListener comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    public class MaClasse extends JInternalFrame {
     
    // initialisation des components
    ...
     
    // initalisation des actions
    public void initAction(){
    myButton.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				doSomething();
    			}
    		});
    }
    }
    J'aimerai réaliser un tissage pour intercepter soit la methode actionPerformed, soit doSomething().
    Mon fichier de description xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <bean id="myInterceptor" class="com.MyInterceptor"/>
     
    <bean id="myPointCut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
    		<property name="pattern" value="com.MaClasse.*"/>
    	</bean>
     
    <bean id="myAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
    		<property name="pointcut" ref="myPointCut"/>
    		<property name="advice" ref="myInterceptor"/>
    	</bean>
    J'ai essayé plusieurs définitions de pattern de pointCut, tels que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <bean id="myPointCut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
    		<property name="pattern" value="java.awt.event.ActionListener.*"/>
    	</bean>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <bean id="myPointCut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
    		<property name="pattern" value="com.MaClasse.*.*"/>
    	</bean>
    mais rien à faire, je n'intercepte pas ce que je veux...

    PS: j'espere que je suis dans la bonne section

  2. #2
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2008
    Messages : 63
    Points : 109
    Points
    109
    Par défaut
    Je dirais que ça peut pas marcher :
    Pour qu'une méthode soit interceptée par l'AOP, il faut l'appel à cette méthode passe par le proxy du bean.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Points : 459
    Points
    459
    Par défaut
    Il faut que ton ActionListener soit une classe créée par spring. Tu l'injectes ensuite dans ta JFrame via un Setter ...

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 958
    Points : 4 387
    Points
    4 387
    Par défaut
    ou alors passez à AspectJ avec quelque chose du genre :

    (in ActionPerformedAspect.aj)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public aspect ActionPerformedAspect {
     
    	public pointcut actionPerformed(): call(public void ActionListener.actionPerformed(ActionEvent e)) ;
     
     
            Object around(ActionEvent e):actionPerformed(e) {
                 //code to be executed before actionPerformed
                 // ...
                 proceed(e) ;
                 // code to be executed after actionPerformed
                 // ...
     
                // pointcut on void : we don't need to return anything...
            }
    }
    (non testé…)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Merci pour vos réponses, je vais creuser AspectJ

Discussions similaires

  1. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. Réponses: 10
    Dernier message: 28/05/2009, 09h29
  4. Réponses: 6
    Dernier message: 20/04/2007, 15h24
  5. "ajouter une méthode dans une méthode"
    Par Zorgloub dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2006, 12h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo