2013-01-04 23 views
6

tworzę własną niestandardową skrótu adnotacji, jak opisano w Spring Documentation:Wiosenna adnotacja w stylu wiosennym: jak dziedziczyć atrybuty?

@Target({ElementType.METHOD, ElementType.TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
@Transactional(value = "Custom", readOnly = true) 
public @interface CustomTransactional { 
} 

Czy to możliwe, że z moim niestandardowego adnotacji mogę być również w stanie ustawić inne atrybuty, które są dostępne w @Transactional? Chciałabym móc używać adnotacji, na przykład tak:

@CustomTransactional(propagation = Propagation.REQUIRED) 
public class MyClass { 

} 

Odpowiedz

4

Nie, to nie będzie działać, jeśli chcesz dodatkowe atrybuty, które będą musiały być ustawione na zlecenie samego adnotacji w ten sposób:

@Target({ElementType.METHOD, ElementType.TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
@Transactional(value = "Custom", readOnly = true, propagation = Propagation.REQUIRED) 
public @interface CustomTransactional { 
} 

roztwór (zły :-)) może być zdefiniować wiele adnotacji z podstawowego zestawu przypadków, które widzisz na swoim scenariuszu:

@Target({ElementType.METHOD, ElementType.TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
@Transactional(value = "Custom", readOnly = true, propagation = Propagation.REQUIRED) 
public @interface CustomTransactionalWithRequired { 
} 

@Target({ElementType.METHOD, ElementType.TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
@Transactional(value = "Custom", readOnly = true, propagation = Propagation.SUPPORTED) 
public @interface CustomTransactionalWithSupported { 
} 
+0

Tak, myślałem o takim scenariuszu, ale potem chciałbym skończyć z wieloma dopiskiem - dla każdej kombinacji atrybutu sensownego;) – Laimoncijus

+1

Tak, Tak myślałem, dlatego uważam to za złe rozwiązanie :-). nie widzisz żadnej innej opcji niż samo używanie '@ Transactional', jeśli tak jest, niestandardowe adnotacje stereotypów pomogą, jeśli masz ustalony zestaw atrybutów dla adnotacji. –

Powiązane problemy