post-image

Spring Boot AOP

AOP

1. Tổng quan

Ứng dụng của chúng ta thường được phát triển với nhiều layer (lớp). Một ứng dụng Java điển hình sẽ có các layer như sau:

  • Web Layer: Nó hiển thị các service bằng cách sử dụng REST hoặc ứng dụng Web.
  • Business Layer: Nó thực hiện các logic nghiệp vụ của một ứng dụng.
  • Data Layer: Nó thực hiện các logic bền vứng của ứng dụng.

Trách nghiệm của mỗi layer là khác nhau, nhưng có một số khía cạnh chung được áp dụng cho tất cả các layer là Logging, Security, validation, caching. Những khía cạnh chung này được gọi là những mối quan tâm xuyên suốt (cross-cutting concern).

Nếu chúng ta thực hiện những mỗi quan tâm này trong từng layer khác nhau, đoạn code của chúng ta sẽ trở nên khó bảo trì hơn. Và để giải quyết vấn đề này, lập trình hướng khía cạnh (AOP) cung cấp cho ta một giải pháp để thực hiện các mối quan tâm xuyên suốt.

  • Thực hiện mối quan tâm xuyên suốt như một khía cạnh.
  • Xác định các pointcut để chỉ ra nơi mà khía cạnh phải được áp dụng.

2. AOP

AOP (hay còn gọi là Aspect-Oriented Programming) là một mẫu lập trình làm tăng tính module bằng cách cho phép phân tách các mối quan tâm xuyên suốt. Những mối quan tâm xuyên suốt này khác với các business logic. Chúng ta có thể thêm các hành vi bổ sung vào đoạn code mà không cần phải chỉnh sửa tới đoạn code của mình.

Spring AOP framework giúp chúng ta thực hiện những mối quan tâm xuyên suốt này.

Sử dụng AOP, chúng ta xác định các chức năng dùng chung ở một nơi. Chúng ta có thể tự do xác định cách thức cũng như nơi áp dụng các chức năng này mà không cần phải sửa đổi các class mà chúng ta đang áp dụng các tính năng mới. Mối quan tâm xuyên suốt giờ đây đã được module hóa thành các class đặc biệt và được gọi là aspect.

Có 2 lợi ích của aspect đó là:

  • Đầu tiên đó là logic cho các mối quan tâm giờ đây ở một nơi thay vì nằm rải rác khắp các đoạn mã khác nhau.
  • Các module nghiệp vụ chỉ chứa mã cho mối quan tâm chính của chúng. Mối quan tâm thứ cấp đã được chuyển sang cho aspect.

Các aspect có trách nghiệm được thực hiện được gọi là advice. Chúng ta có thể triển khai chức năng của một aspect vào trong chương trình tại một hoặc nhiều điểm tham gia (join point).

3. Lợi ích của AOP

  • Nó được thực hiện bằng Java thuần túy.
  • Không có yêu cầu nào cho một quá trình biên dịch đặc biệt.
  • Nó chỉ hỗ trợ thực hiện các method Join point.
  • Có 2 loại proxy AOP có sẵn đó là: JDK dynamic proxy và CGLIB proxy.

4. Mối quan tâm xuyên suốt (Cross-cutting concern)

Mối quan tâm xuyên suốt là mối quan tâm mà chúng ta muốn triển khai chúng ở nhiều nơi trong một ứng dụng và nó làm ảnh hưởng đến toàn bộ ứng dụng của chúng ta.

5. Các thuật ngữ của AOP

  • Aspect: Aspect(khía cạnh) là một module đóng gói những advice và các pointcut và cung cấp tính xuyên suốt. Một ứng dụng có thể có bất kỳ khía cạnh nào. Chúng ta có thể triển khai một khía cạnh bằng cách sử dụng class thông thường với annotation @Aspect.
  • Pointcut: pointcut là một biểu thức chọn một hoặc nhiều điểm nối(join poin) nơi advice được thực thi. Chúng ta có thể xác định các pointcut bằng cách sử dụng các biểu thức hoặc các mẫu. Nó sử dụng các loại biểu thức khác nhau phù hợp với các điểm tham gia.
  • Join point: Join point là một điểm trong ứng dụng nơi chúng ta áp dụng khía cạnh AOP.
  • Advice: Advice là một hành động mà chúng ta thực hiện trước hoặc sau khi method thực hiện. Có 5 loại advice trong Spring AOP framework đó là: before, after, after-returning, after-throwing, and around advice. Các advice được sử dụng cho một join point cụ thể. Chúng ta sẽ thảo luận phần này ở bài viết sau.
  • Target object: Đối tượng mà được các advice sử dụng thì được gọi là target object. Target object thì luôn là một proxy. Nó có nghĩa là một lớp con được tạo ra tại thời điểm chạy, trong đó phương thức đích bị ghi đè và các advice được đưa vào dựa trên cấu hình của chúng.
  • Weaving: Nó là một quá trình liên kết các khía cạnh với các loại ứng dụng khác. Chúng ta có thể thực hiện nó tại các thời điểm như: run time, load time, và compile time.

Proxy: Nó là một đối tượng được tạo ra sau khi áp dụng advice cho target object. Spring AOP triển khai JDK dynamic proxy để tạo các lớp proxy với các lớp mục tiêu. Chúng được gọi là các proxy AOP class.

6. So sánh AOP và OOP

AOPOOP
Aspect: bao gồm pointcut, advice và attribute.Class: bao gồm các method và attribute.
Pointcut: Nó xác định tập hợp các điểm vào mà advice được thực hiện.Method signature: Nó xác định các điểm đầu vào để thực thi phần thân của phương thức.
Advice: Nó là một triển khai các mối quan tâm xuyên suốt.Method bodies: Nó là một triển khai của các business logic.
Waver: Nó xây dựng mã với advice.Compiler: Nó chuyển đổi mã nguồn thành mã đối tượng.

7. Spring Boot Starter AOP

Spring Boot Starter AOP là một phụ thuộc cung cấp Spring AOP và AspectJ. Trong đó AOP cung cấp các khả năng AOP cơ bản trong khi AspectJ cung cấp một khung framework AOP hoàn chỉnh/

<dependency>  
<groupId>org.springframework.boot</groupId>  
<artifactId>spring-boot-starter-aop</artifactId>  
<version>2.2.2.RELEASE</version>  
</dependency> 

8. Kết luận

Ở bài viết này, chúng ta đã cùng tìm hiểu những kiến thức cơ bản về AOP.

Trong bài sau chúng ta sẽ cùng tìm hiểu các loại advice khác nhau có trong ứng dung.

Nguồn: https://www.javatpoint.com/spring-boot-aop

Leave a Reply

Your email address will not be published. Required fields are marked *