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 :

Annotation perso sur méthode [Framework]


Sujet :

Spring Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 78
    Points : 62
    Points
    62
    Par défaut Annotation perso sur méthode
    Bonjour,

    J'ai créé une annotation perso que je désire appliquer sur des méthodes de mes beans pour déclencher un traitement autour de l'exécution de ces méthodes annotées.

    Pour cela j'utilise StaticMethodMatcherPointcutAdvisor afin que Spring prenne en compte à son initialisation les méthodes annotées. Mais dans la méthode matches je ne vois aucune annotation sur les méthodes qui sont pourtant bien annotées.

    Ai-je oublié quelque chose, une configuration Spring à activer ou autre ?

    Voici l'annotation :
    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
    18
    19
    20
    21
    package jkt.centralisateur.storage.transaction;
     
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
     
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    @Inherited
    @Documented
    public @interface JktTransactional {
     
        /**
         * <code>true</code> if the transaction is read-only.
         * <p>Defaults to <code>false</code>.
         */
        boolean readOnly() default false;
    }
    Mon intercepteur de méthodes :
    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
    18
    19
    public class JktTransactionManager extends StaticMethodMatcherPointcutAdvisor implements MethodInterceptor {
    ...
        public boolean matches(final Method method, final Class targetClass) {
            final Method specificMethod = AopUtils.getMostSpecificMethod(method, targetClass);
            Collection<Annotation> annotations = Arrays.asList(specificMethod.getDeclaredAnnotations());        
            boolean result = false;
     
            if(annotations != null) {
                for (final Annotation annotation : annotations) {
                    // Je ne rentre jamais ici
                    if (JktTransactional.class.isAssignableFrom(annotation.getClass())) {
                        result = true;
                        break;
                    }
                }
            }
     
            return result;
        }
    J'ai aussi ajouté dans mes applicationContext les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />
        <bean id="jktTransactionManager" class="jkt.centralisateur.storage.transaction.JktTransactionManager">
    ...
        </bean>
    Et bien-sûr j'ai une classe qui possède une méthode annotée :
    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
    public class UserService {
    ...
        @JktTransactional(readOnly=false)
        public CreateUserResult jktCreateUser(final UserDto userDto) {
            String username = userDto.getLogin();
            String password = userDto.getPassword();
            String email = userDto.getEmail();
            String uuidInscription = userDto.getUuidInscription();
     
            Set<String> roles = userDto.getRoles();
     
            return userBuisiness.createUser(username, password, email, uuidInscription, false, roles);  
        }
    ...
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 78
    Points : 62
    Points
    62
    Par défaut
    Problème résolu, il faut ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <aop:config proxy-target-class="true" />
    afin que ce soit CGlib qui construise les proxy, ce qui permet d'annoter directement les classes au lieu d'être contraint à annoter les interfaces pour que les annotations puissent être prises en compte par Spring.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/01/2009, 17h34
  2. Ajout de menu perso sur clique droit de la souris !!
    Par Kyp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/12/2005, 17h06
  3. Pointeur de fonctions sur méthode
    Par Glosialabolas dans le forum C++
    Réponses: 9
    Dernier message: 04/12/2005, 14h55
  4. souris perso sur les images
    Par kevinf dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/11/2005, 14h57
  5. Minimize Maximize perso sur une form autre que Application
    Par sdebrois dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 07/03/2005, 17h59

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