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 :

appeler une fonction avant


Sujet :

Spring Java

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut appeler une fonction avant
    salut

    dans une classe j'ai quelques méthodes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public class ManageUser{
     public void getUser(int i)...
    comment faire pour que chaque fois que la méthode getUser soit appelé que j'exécute une autre méthode avant elle (cette autre méthode vérifierais si la personne qui exécute ça à les permissions..

    merci



    merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Points : 57
    Points
    57
    Par défaut
    Je crois que tu es partis pour te compliquer la vie mais si je peux te donner quelques piste sur des solutions possibles:
    - Faire un appel à la méthode désirer dans getUser ... C'est toujours bon d'enfoncer des portes ouvertes en informatique.
    - Créer une facade (design Pattern) qui appellera ta méthode de vérification de droit puis le vrai getUser
    - Utiliser un framework de sécurité comme Acegi par exemple qui une fois bien configurer fera le travail pour toi (allez sur le site pour examiner la doc)

    Si d'autre personnes ont des idées ... Mais pour ma part je pense que, si tu veux vraiment t'occuper de gérer l'autorisation tu es tout aussi bien d'utiliser un outil comme Acegi.

    Sur ce ...

    Mohicane

  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
    Voila une solution spring AOP

    Tu dois créer un MethodInterceptor, et avec Spring-AOP, tu appliques cet intercepteur sur ton manager.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class SecurityMethodInterceptor implements MethodInterceptor {
      public Object invoke(MethodInvocation invocation) throws Throwable {
         if(invocation.getMethod().getName().startWith("update")) {
             throw new RuntimeException("méthode non autorisée");
         } else {
             return invocation.proceed();
         }
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <bean id="securityAdvice" class="SecurityMethodInterceptor" />
     
    <aop:config>
        <aop:pointcut id="managerPointcut" expression="execution(public * foo.bar.ManagerUser.*.*(..))"/>
        <aop:advisor pointcut-ref="managerPointcut" advice-ref="securityAdvice"/>
    </aop:config>
    EDIT: tu pourrais utiliser Acegi, qui fonctionne sur le principe que je viens de donner, mais si tu ne maitrises pas AOP, il vaut mieu commencer par des exemples simples...

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par bugsan Voir le message
    Voila une solution spring AOP

    Tu dois créer un MethodInterceptor, et avec Spring-AOP, tu appliques cet intercepteur sur ton manager.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class SecurityMethodInterceptor implements MethodInterceptor {
      public Object invoke(MethodInvocation invocation) throws Throwable {
         if(invocation.getMethod().getName().startWith("update")) {
             throw new RuntimeException("méthode non autorisée");
         } else {
             return invocation.proceed();
         }
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <bean id="securityAdvice" class="SecurityMethodInterceptor" />
     
    <aop:config>
        <aop:pointcut id="managerPointcut" expression="execution(public * foo.bar.ManagerUser.*.*(..))"/>
        <aop:advisor pointcut-ref="managerPointcut" advice-ref="securityAdvice"/>
    </aop:config>
    EDIT: tu pourrais utiliser Acegi, qui fonctionne sur le principe que je viens de donner, mais si tu ne maitrises pas AOP, il vaut mieu commencer par des exemples simples...
    ok merci

    avec ton exemple, j'ai lu un peu sur le sujet et avec ton exemple, je me pose quelques questions...

    dans ta classe SecurityMethodInterceptor, que fera invocation.proceed?


    dans la config aop

    - expression, je vois que tu utilises une expression régulière.... il y a moyen de spécifier seulement la méthode auquel on veut la connecter...

    comment aop saura qu'il faut qu'il execute ca avant l'appel de ma méthode et non après?

  5. #5
    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
    Citation Envoyé par robert_trudel Voir le message
    ok merci
    dans ta classe SecurityMethodInterceptor, que fera invocation.proceed?
    Cela execute la vraie méthode qui était sensée être appelée.

    Citation Envoyé par robert_trudel Voir le message
    dans la config aop

    - expression, je vois que tu utilises une expression régulière.... il y a moyen de spécifier seulement la méthode auquel on veut la connecter...
    Cela s'appelle un "point de coupe".
    Et oui pour une seule méthode ca devrait etre : execution(public * foo.bar.ManagerUser.getUser(..))
    comme tu peux le comprendre cela correspond à "visibilité retour package.class.method(args)"

    Citation Envoyé par robert_trudel Voir le message
    comment aop saura qu'il faut qu'il execute ca avant l'appel de ma méthode et non après?
    Cela correspond au pattern décorateur. En fait quand tu vas demander à Spring le bean ManagerUser... il ne va pas te retourner un simple objet ManagerUser, mais un ManagerUser "enrobé" avec le fameux MethodInterceptor. Il faut imaginer les intercepteur comme des poupées russes.

    Il y a plusieurs type d'interception de méthode. Before, After, Around... dans ce cas ci, c'est "Around". Tout ça est expliqué dans la doc de Spring. http://static.springframework.org/sp...tml#aop-schema

    Around est le plus "puissant", c'est celui qui permet de placer du code "autour", avant et apres le proceed(), meme de décider de ne pas l'appeler.

    Pour aller plus loin : dans le cadre de gestion de droits, il faut que tu injectes dans le SecurityMethodInterceptor, un autre manager qui sait controler les autorisations en lui passant un utilisateur et un nom de methode, et qui peut retourner true ou false (par exemple).
    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 class SecurityMethodInterceptor implements MethodInterceptor {
        private AuthorizationManager authManager;
     
        public void setAuthorizationManager(AuthorizationManager authManager) {
            this.authManager = authManager;
        }
     
        public Object invoke(....) {
            // ...
            if( ! authManager.checkResource(invocation.getMethod().getName(), user) {
                throw new RuntimeException("forbidden");
            } else {
                return invocation.proceed();
            }
        }
    Je ne te cache pas que c'est le principe même d'Acegi que l'on a évoqué plus haut.

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par bugsan Voir le message
    Cela execute la vraie méthode qui était sensée être appelée.



    Cela s'appelle un "point de coupe".
    Et oui pour une seule méthode ca devrait etre : execution(public * foo.bar.ManagerUser.getUser(..))
    comme tu peux le comprendre cela correspond à "visibilité retour package.class.method(args)"



    Cela correspond au pattern décorateur. En fait quand tu vas demander à Spring le bean ManagerUser... il ne va pas te retourner un simple objet ManagerUser, mais un ManagerUser "enrobé" avec le fameux MethodInterceptor. Il faut imaginer les intercepteur comme des poupées russes.

    Il y a plusieurs type d'interception de méthode. Before, After, Around... dans ce cas ci, c'est "Around". Tout ça est expliqué dans la doc de Spring. http://static.springframework.org/sp...tml#aop-schema

    Around est le plus "puissant", c'est celui qui permet de placer du code "autour", avant et apres le proceed(), meme de décider de ne pas l'appeler.

    Pour aller plus loin : dans le cadre de gestion de droits, il faut que tu injectes dans le SecurityMethodInterceptor, un autre manager qui sait controler les autorisations en lui passant un utilisateur et un nom de methode, et qui peut retourner true ou false (par exemple).
    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 class SecurityMethodInterceptor implements MethodInterceptor {
        private AuthorizationManager authManager;
     
        public void setAuthorizationManager(AuthorizationManager authManager) {
            this.authManager = authManager;
        }
     
        public Object invoke(....) {
            // ...
            if( ! authManager.checkResource(invocation.getMethod().getName(), user) {
                throw new RuntimeException("forbidden");
            } else {
                return invocation.proceed();
            }
        }
    Je ne te cache pas que c'est le principe même d'Acegi que l'on a évoqué plus haut.
    avec l'exemple que tu donnes, est'on obliger de créer un fichier de config

  7. #7
    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
    heu, non. Mon exemple n'est pas complet de toute manière.

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    je voudrais qu'une méthode s'exécute pour toutes les méthodes d'une classe...

    j'ai tenté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    expression="execution(* com.webDoc.server.admin.logic.UserAdminImpl(..)"
     
    expression="execution(com.webDoc.server.admin.logic.UserAdminImpl()"
    mais aucun des deux fonctionne

  9. #9
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execution(* com.webDoc.server.admin.logic.UserAdminImpl.*(..))

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    <aop:config>
    <aop:pointcut id="servicePointcut" expression="execution(* edocuweb.server.admin.logic.UserAdminImpl(..))"/>
    <aop:aspect id="securityAspect" ref="securityManager">
    <aop:before method="securityMethodEntry" pointcut-ref="servicePointcut"/>
    </aop:aspect>
    </aop:config>

    <bean id="securityManager" class="edocuweb.server.admin.logic.UserAdminValidationImpl"/>




    lorsque je fais exécuter mon application,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private UserAdminImpl odUserAdminDao;
     
        public String execute() {
     
            ServletContext servletContext = ServletActionContext.getServletContext();
            WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
     
     
            odUserAdminDao = (UserAdminImpl) wac.getBean("odUserAdminDao"); //ici
     
            return "ok";
    }
    j'obtiens un classcastexception depuis que j'ai mis aop...

    le fichier applciationContext.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <aop:config>
            <aop:pointcut id="servicePointcut" expression="execution(* com.webDoc.server.admin.logic.UserAdminImpl.*(..))"/>
            <aop:aspect id="securityAspect" ref="securityManager">
                <aop:before method="securityMethodEntry"  pointcut-ref="servicePointcut"/>  
            </aop:aspect>
        </aop:config>    
     
    <bean id="securityManager" class="com.webDoc.server.admin.logic.UserAdminSecurity"/>

  11. #11
    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
    Ca doit etre un probleme d'interface.
    Tu ne devrais pas utiliser UserAdminImpl, mais une interface UserAdminDao et ne travailler qu'avec des interfaces.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class UserAdminDaoImpl implements UserAdminDao {
        // ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UserAdminDao dao = (UserAdminDao) wac.getBean("odUserAdminDao");
    La raison c'est que pour qu'AOP fonctionne convenablement il faut qu'il manipule des interfaces. Sinon il doit utiliser CGLIB et c'est pas recommandé dans la doc de spring.

  12. #12
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par bugsan Voir le message
    Ca doit etre un probleme d'interface.
    Tu ne devrais pas utiliser UserAdminImpl, mais une interface UserAdminDao et ne travailler qu'avec des interfaces.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class UserAdminDaoImpl implements UserAdminDao {
        // ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UserAdminDao dao = (UserAdminDao) wac.getBean("odUserAdminDao");
    La raison c'est que pour qu'AOP fonctionne convenablement il faut qu'il manipule des interfaces. Sinon il doit utiliser CGLIB et c'est pas recommandé dans la doc de spring.
    ok et dans la conf de aop, faut mettre l'interface ou la classe?

  13. #13
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    dans la classe qui est appelé avant toutes les méthodes, il y a un accès à une bd (via un objet)


    lorsque je démarre le système j'ai l'erreur

    Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy0] to required type

  14. #14
    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
    Attend je regarde


  15. #15
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par bugsan Voir le message
    Attend je regarde

    l'erreur exacte est

    Error creating bean with name 'securityManager' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy0] to required type [com.server.admin.logic.UserAdminImpl] for property 'userAdminImpl'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy0] to required type [com.server.admin.logic.UserAdminImpl] for property 'userAdminImpl': no matching editors or conversion strategy found
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityManager' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy0] to required type [com.server.admin.logic.UserAdminImpl] for property 'userAdminImpl'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy0] to required type [com.server.admin.logic.UserAdminImpl] for property 'userAdminImpl': no matching editors or conversion strategy found
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:404)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:375)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:263)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:170)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:260)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:184)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:163)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:430)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
    at MonServiceTest.testMonService(MonServiceTest.java:29)
    Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy0] to required type [com.server.admin.logic.UserAdminImpl] for property 'userAdminImpl'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy0] to required type [com.server.admin.logic.UserAdminImpl] for property 'userAdminImpl': no matching editors or conversion strategy found
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:391)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1253)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:978)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:462)
    Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy0] to required type [com.server.admin.logic.UserAdminImpl] for property 'userAdminImpl': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:238)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:386)
    ce qui me parle pas trop...

  16. #16
    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
    Dans ton securityManager, tu as un attribut de type UserAdminImpl.
    J'ai dis plus haut qu'il faut travailler qu'avec des interfaces, dont cet attribut devrait plutot être de type UserAdminDao (ou suivant comment tu as nommé son interface)

  17. #17
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par bugsan Voir le message
    Dans ton securityManager, tu as un attribut de type UserAdminImpl.
    J'ai dis plus haut qu'il faut travailler qu'avec des interfaces, dont cet attribut devrait plutot être de type UserAdminDao (ou suivant comment tu as nommé son interface)
    ok c'est fait... cette erreur est enlevée... maintenant j'ai plutôt une erreur plus grave

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Caused an ERROR
    null
    java.lang.StackOverflowError
            at java.lang.ThreadLocal.get(ThreadLocal.java:124)
            at org.springframework.aop.interceptor.ExposeInvocationInterceptor.currentInvocation(ExposeInvocationInterceptor.java:71)
            at org.springframework.aop.aspectj.AbstractAspectJAdvice.getJoinPointMatch(AbstractAspectJAdvice.java:650)
            at org.springframework.aop.aspectj.AspectJMethodBeforeAdvice.before(AspectJMethodBeforeAdvice.java:39)
            at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:49)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
            at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
            at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
            at $Proxy0.getUser(Unknown Source)

  18. #18
    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
    Bah la, j'vois pas du tout.
    AOP s'emmêle les pinceaux.
    Tu veux pas plutôt utiliser le MethodInterceptor ?
    Ou sinon, à tout hasard, dans le pattern du point de coupe, essai avec l'interface et non pas UserAdminImpl.*(..)

  19. #19
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par bugsan Voir le message
    Bah la, j'vois pas du tout.
    AOP s'emmêle les pinceaux.
    Tu veux pas plutôt utiliser le MethodInterceptor ?
    Ou sinon, à tout hasard, dans le pattern du point de coupe, essai avec l'interface et non pas UserAdminImpl.*(..)
    ok je vais essayer avec l'interface...

    si ça fonctionne pas, je vais regarder s'il y a pas de bon example avec MethodInterceptor

  20. #20
    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
    C'était mon premier exemple...

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/04/2012, 01h02
  2. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 12h30
  3. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 15h54
  4. [JSP] Appeler une fonction
    Par Patrick95 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 23/12/2003, 14h44
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 19h48

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