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 :
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
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; }
J'ai aussi ajouté dans mes applicationContext les lignes suivantes :
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; }
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 <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" /> <bean id="jktTransactionManager" class="jkt.centralisateur.storage.transaction.JktTransactionManager"> ... </bean>
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); } ... }
Partager