Как расширить аннотацию Spring @Transactional

мне нужно использовать 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), Какая для этого правильная реализация?

7
задан tim.kaufner 31 August 2010 в 09:39
поделиться

1 ответ

Боюсь, вам придется создать несколько пользовательских аннотаций, по одной для каждого варианта использования, аннотируя каждую именно той аннотацией @Transactional, которая вам нужна.

Или вам придется написать свой собственный аспект в AspectJ (расширить org.springframework.transaction.aspectj.AbstractTransactionAspect из spring-aspects.jar), чтобы создать собственную логику транзакций.

4
ответ дан 7 December 2019 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: