Je dois utiliser 3 gestionnaires de transactions différents dans ma webapp. J'ai donc écrit ma propre annotation selon le Spring reference (Section 10.5.6.3 Annotations personnalisées de raccourci).Comment prolonger Spring Annotation @Transactional
Une annotation (pour l'utilisation d'un TransactionManager spécifique) ressemble à ceci:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.transaction.annotation.Transactional;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional("customer")
public @interface CustomerTX{
}
Tout fonctionne bien quand annoter ma couche de service avec l'annotation @CustomerTX personnalisée. Mais je dois fournir plus d'options pour mon annotation, comme readonly = true, rollbackFor = et ainsi de suite. Comme vous ne pouvez pas "étendre" une annotation (j'ai juste besoin d'étendre l'annotation @Transactional de Spring), quelle est la bonne implémentation pour cela?
Voulez-vous dire vraiment que je dois écrire quelque chose comme ça (en supposant que je veux juste avoir mis la transaction en lecture seule): @Target ({ElementType.METHOD, ElementType.TYPE}) @Retention (RetentionPolicy.RUNTIME) @Transactional (valeur = "client", readOnly = true) @interface publique CustomerTXReadonly { } Cela ne peut pas être la seule solution de travail ... –
J'ai peur, parce que des limitations des annotations. Comme je l'ai dit: soit cela ou écrire vos propres aspects (que je préférerais) –
Merci pour votre aide. Je vais essayer d'écrire mes propres aspects. Il est dommage que les annotations ne soient pas extensibles :( –