Tôi đang gặp một chút rắc rối khi tìm cách tạo một đường cắt sẽ hoạt động trên các hạt có thông số chú thích cụ thể. Mục đích cuối cùng của tôi là xác nhận giá trị của tham số trước khi nó được xử lý, nhưng trong thời điểm này tôi chỉ cần tạo ra các điểm cắt.Cách viết một đường cắt khía cạnh dựa trên thông số có chú thích
Hãy xem xét các chú thích sau
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.PARAMETER })
public @interface MyAnnotation {}
sau đó tôi muốn áp dụng điều này để một số phương pháp như:
public void method1(@MyAnnotation long i) {}
public void method2(String someThing, @MyAnnotation long i) {}
public void method3(String someThing, @MyAnnotation long i, byte value) {}
Vì vậy
- Tôi không quan tâm mà lớp (hoặc gói) các phương pháp có trong
- Vị trí của chú thích đối số ed sẽ thay đổi.
- Tôi biết rằng giá trị chú thích sẽ chỉ áp dụng đối với một loại hình cụ thể
thực hiện pointcut tôi cần phải được một cái gì đó dọc theo dòng:
@Before(value = "* *(..) && args(verifyMe)")
public void verifyInvestigationId(long verifyMe) {}
Tôi nhận được một chút bối rối về chính xác giá trị của @Before
cần phải thực hiện và cách gắn trong chú thích và loại của nó. Tại thời điểm này có lẽ không đáng liệt kê những thứ tôi đã thử!
Cập nhật: Dựa trên những lời khuyên tôi đã nhìn thấy trong http://stackoverflow.com/questions/3565718/pointcut-matching-methods-with-annotated-parameters/3567170#3567170 (và sửa chữa một vài hiểu lầm và thêm không gian tôi bỏ qua) tôi đã có tới điểm mà các công việc sau:
@Before("execution(public * *(.., @full.path.to.MyAnnotation (*), ..))")
public void beforeMethod(JoinPoint joinPoint) {
System.out.println("At least one of the parameters are annotated with @MyAnnotation");
}
này là gần như những gì tôi cần - tất cả những gì cần làm là vượt qua giá trị của tham số chú thích như một tham số để phương pháp. Tôi có thể không hoàn toàn làm việc ra cú pháp để có được mùa xuân để làm điều này (câu trả lời liên kết không hiển thị này).
thể trùng lặp của [pointcut phương pháp phù hợp với các thông số chú thích] (http://stackoverflow.com/questions/2766844/pointcut-matching-methods-with-annotated-parameters) – sheltem
@sheltem, Cảm ơn đã chỉ cho tôi điều này. Thật không may, đây là một trong những điều tôi đã thử, nhưng thất bại. Các nhật ký chứa lỗi: Dấu cắt không được định dạng đúng: mong đợi 'mẫu tên' ở vị trí ký tự 56 thực thi (công khai * * (.., @ aspect.VerifyMe (*), ..)) – Stormcloud
BTW: có hai các ngôi sao tách biệt bởi một khoảng trắng sau từ 'công khai' - stackoverflow đã diễn dịch chúng như nghiêng! – Stormcloud