Tôi đang gặp phải một hành vi lạ khi xem qua phản chiếu cho chú thích trên phương thức thuộc về lớp được ủy quyền thông qua CGLIB. Chúng tôi sử dụng CGLIB trong Spring và nếu tôi chú thích một phương thức chỉ với chú thích thì nó hoạt động tốt (tôi có thể truy xuất các chú thích thông qua phương thức getAnnotations()
trên đối tượng Method
của đối tác). Nếu tôi chú thích phương thức với 2 chú thích thay thế (bất kể thứ tự chú thích), getAnnotations()
chỉ cần trả lại null
. Cả hai chú thích đều có RetentionPolicy.RUNTIME
.chú thích phương thức vô giá trị khi ủy quyền qua CGLIB
Tôi đọc có một số vấn đề với CGLIB, nhưng thật lạ khi nó chỉ hoạt động cho một chú thích và nó trả về null khi tôi đặt 2 chú thích.
Mọi đề xuất?
(Sử dụng mùa xuân 3.0.5 và 2.2.2 cglib)
Thêm mã:
1st chú thích là:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Produces {
ResultType[] value();
}
2 chú thích là
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface JamonMonitored {
String type() default "";
String tag() default "";
}
Và khối mã để kiểm tra chú thích là
Collection<Method> candidates = Collections2.filter(Arrays.asList(executorInstance.getClass().getMethods()), new Predicate<Method>() {
@Override
public boolean apply(Method input) {
return input.getAnnotation(Produces.class) != null;
}
});
if (candidates.isEmpty()) {
// throws exception
}
Nếu tôi chú thích phương thức có cả @Sản phẩm và @JamonMonitored, getAnnotation(Produces.class)
luôn là null
.
Bạn có thể cung cấp mã không . điều này có vẻ xen kẽ, muốn có một cái nhìn. Nhưng havent nghe nói về bất kỳ điều như vậy, hnece mã? –
Và hy vọng bạn đã trải qua điều này bit bit - http://stackoverflow.com/questions/1706751/retain-annotations-on-cglib-proxies –