Câu trả lời:
Hãy nghĩ về một mối quan tâm như một nhóm chức năng, ví dụ như đăng nhập, kiểm toán, bảo mật
Các chức năng này đã từng có mặt trong hầu hết các mã, nhưng chúng không thực sự sống trong các lớp động vật của chúng ta -> chúng là các chức năng nên sống trong nhiều lớp - chúng là mối quan tâm xuyên suốt .
Điểm tham gia là một vị trí trong mã nơi mã khía cạnh thực sự được chạy.
Một điểm cắt là làm thế nào để nói mã nào chạy ở điểm nối.
Dệt - là khi trình biên dịch / hệ thống lấy mã thông thường của bạn và bao gồm tất cả mã AOP để nó kích hoạt mã chính xác, v.v. - có thể coi đây là một bước biên dịch bổ sung.
Một ví dụ đơn giản dễ hiểu là:
Xin lưu ý rằng thuật ngữ này hơi khác nhau giữa các triển khai và khung AOP khác nhau.
Mỗi định nghĩa được xây dựng trên những cái trước đó.
Một cái gì đó làm phiền bạn (quan tâm) ở mọi nơi (xuyên suốt) trên ứng dụng của bạn. ví dụ: đăng nhập hoặc bảo mật
Một đoạn mã được tự động thêm trước , sau hoặc cả hai ( xung quanh ) mã hiện tại của bạn
Application code
|
|
|
|
\|/
|
JoinPoint ----------->("before" aspect, on the way in) // just before your intercepted application code
Pointcut start--------> public String myMethod(params ...)
//your application code
Pointcut finish--------> return (foo)
JoinPoint ----------->("after" aspect, on the way out) // just after your intercepted application code
|
\|/
|
|
|
Application code
Một nơi trong thực thi mã trong đó một phần của khía cạnh thực thi.
Điểm mà khía cạnh của bạn "tham gia" điểm cắt. Tại tham gia "trước", bạn sẽ có quyền truy cập vào các tham số, tại "sau" tham gia, bạn sẽ có quyền truy cập vào giá trị trả về. Nếu một ngoại lệ được ném ra, bạn có thể cần một "thử bắt cuối cùng" để xử lý hoặc ném lại nó.
Quá trình thêm các khía cạnh xung quanh một điểm cắt