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:
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:
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:
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:
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);
}
...
} |