Chào các em ,chủ để hôm nay chúng ta sẽ tìm hiểu về AOP Pointcut có ý nghĩa là gì nhé .
1. Spring AOP Pointcut là gì
Trong bài ví dụ về aop advise các em thấy một nhược điểm là tất cả method trong class HijackAroundMethod đều phải chạy intercept MethodBeforeAdvice , AfterReturningAdvice. Nhưng trong thực tế không phải lúc nào mình cũng chạy hết tất cả các method cần ghi log. Mà ta chỉ mong muốn chạy một vài method thôi mà thôi. Để làm được việc này ta sử dụng Pointcut
Để sử dụng được AOP Pointcut chúng ta có các thành phần sau
Advice : chạy trước khi phương thức được thực thi
Pointcut : Chỉ ra phương thức nào được chạy
Advisor : các Advise và Pointcut được truyền vào proxy object
importjava.util.Arrays;importorg.aopalliance.intercept.MethodInterceptor;importorg.aopalliance.intercept.MethodInvocation;publicclassHijackAroundMethodimplementsMethodInterceptor{@OverridepublicObjectinvoke(MethodInvocationmethodInvocation)throwsThrowable{System.out.println("Method name : "+methodInvocation.getMethod().getName());System.out.println("Method arguments : "+Arrays.toString(methodInvocation.getArguments()));System.out.println("HijackAroundMethod : Before method hacked!");try{Objectresult=methodInvocation.proceed();System.out.println("HijackAroundMethod : Before after hacked!");returnresult;}catch(IllegalArgumentExceptione){System.out.println("HijackAroundMethod : Throw exception hacked!");throwe;}}}
Bước 1 : Tạo bean có tên là NameMatchMethodPointcut và đưa vào tên method mà ta muốn chạy. Trong ví dụ này chúng ta chỉ muốn chạy một mình phương thức printName thôi. Chúng ta khai báo phương thức printName trong thuộc tính mappedName như sau
Như các em thấy chỉ có một phương thức printName được in ra màn hình các phương thức như printURL thì không được in ra. Vì ta chỉ muốn chạy một mình phương thức printName
4. Sử dụng AOP Pointcut với Regular Expression
Chúng ta có thể sử dụng regular expression để gán cho tên phương thức nào sẽ chạy pointcut. Như trong ví dụ dưới đây bất cứ phương thức nào có xuất hiện từ URL sẽ được chạy pointcut.