2013-01-04 43 views
6

Tôi tạo riêng shortcut chú thích tùy chỉnh của tôi, như mô tả trong Spring Documentation:Chú thích tùy chỉnh mùa xuân: cách kế thừa các thuộc tính?

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

Có thể, rằng với chú thích tùy chỉnh của tôi tôi có thể cũng có thể đặt bất kỳ các thuộc tính khác, trong đó có sẵn trong @Transactional? Tôi muốn có thể sử dụng chú thích của tôi, ví dụ, như thế này:

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

} 

Trả lời

4

Không, điều đó sẽ không làm việc, nếu bạn muốn các thuộc tính bổ sung mà sẽ phải được thiết lập trên chú thích tùy chỉnh của bạn chính nó theo cách này:

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

một giải pháp (xấu một :-)) có thể xác định nhiều chú thích với các thiết lập cơ sở của trường hợp mà bạn nhìn thấy cho kịch bản của bạn:

@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

Vâng, tôi nghĩ đến kịch bản như vậy, nhưng sau đó tôi sẽ kết thúc với nhiều chú thích - cho mỗi sự kết hợp thuộc tính hợp lý;) – Laimoncijus

+1

Vâng, Tôi nghĩ như vậy, đó là lý do tại sao tôi đặt nó như là một giải pháp xấu :-). không thấy bất kỳ tùy chọn nào khác ngoài việc sử dụng '@ Transactional' nếu trường hợp đó xảy ra, chú thích định dạng tùy chỉnh sẽ giúp bạn nếu bạn có một tập hợp thuộc tính cố định cho chú thích của mình. –

2

trong (ít nhất) mùa xuân 4, bạn có thể làm điều này bằng cách xác định các yếu tố bên trong chú thích, ví dụ:

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

Nguồn: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-meta-annotations

Các vấn đề liên quan