мне нужно использовать 3 разных менеджера транзакций в моем веб-приложении. Поэтому я написал свою собственную аннотацию в соответствии с ссылкой Spring (раздел 10.5.6.3 Пользовательские аннотации ярлыков).
Одна аннотация (для использования одного конкретного менеджера транзакций) выглядит следующим образом:
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{
}
Все работает нормально при аннотировании моего уровня сервиса с помощью настраиваемой аннотации @CustomerTX. Но я должен предоставить больше параметров для моей аннотации, например readonly = true , rollbackFor = и т. д. Поскольку вы не можете «расширить» аннотацию (мне действительно просто нужно расширить аннотацию @Transactional из Spring), Какая для этого правильная реализация?
Боюсь, вам придется создать несколько пользовательских аннотаций, по одной для каждого варианта использования, аннотируя каждую именно той аннотацией @Transactional
, которая вам нужна.
Или вам придется написать свой собственный аспект в AspectJ (расширить org.springframework.transaction.aspectj.AbstractTransactionAspect
из spring-aspects.jar), чтобы создать собственную логику транзакций.