Spring aop là gì

     
Giới thiệu nội dung bài bác viết

Chào các em ,chủ để từ bây giờ chúng ta sẽ khám phá về AOP Annotation có ý nghĩa là gì nhé .

1. Spring AOP Annotation là gì

Trong bài xích AOP advise họ sử dụng xml để cấu hình cho advise, pointcut cùng around. Từ bây giờ chúng ta sẽ sử dụng annotation để làm AOP như


Bạn đang xem: Spring aop là gì

Around

2. Cấu hình file pom

Chúng ta thêm các thư viện AspectJrt cùng aspecttools vào trong dự án để thực hiện aop

3. Tạo ra Model

Trong ví dụ lúc này chúng ta sẽ thao tác làm việc với Employee. Chúng ta có lớp Employee như sau

12345678910111213141516171819package com.thanhphodong.vn;public class Employee private String name;public String getName() return name;
Loggablepublic void setName(String nm) this.name=nm;public void throwException()throw new RuntimeException("Dummy Exception");
Chúng ta thấy tất cả annotation là
Loggable thì chiếc annotation này dùng ghi log với do họ tự có mang ra. Phần này anh đã nói rõ rộng trong phần 10 bên dưới đây.

3. Chế tạo ra Service

Chúng ta sẽ tạo nên Class EmployeeService để lấy Employee như sau

Aspect trong các số ấy ta định nghĩa cách thức nào buộc phải hook trước lúc chạy. Trong ví dụ này bọn họ áp dụng khi chạy cách làm getName

Một Aspect Class đang được khắc ghi bằng
Before được thực hiện để chạy trước khi method getName được gọi

12345678910111213141516import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;
Before("execution(public String getName())")public void getNameAdvice()System.out.println("Executing Advice on getName()");
Before("execution(*.com.thanhphodong.vn.*.get*())")public void getAllAdvice()System.out.println("Service method getter called");}
6. Lấy ví dụ với AOP Pointcut MethodChúng ta thực hiện phương thức nào sẽ tiến hành chạy AOP hoặc toàn bộ phương thức được chạy bằng áp dụng within

1234567891011121314151617181920212223242526
Before("getNamePointcut()")public void loggingAdvice()System.out.println("Executing loggingAdvice on getName()");
Before("getNamePointcut()")public void secondAdvice()System.out.println("Executing secondAdvice on getName()");
Before("allMethodsPointcut()")public void allServiceMethodsAdvice()System.out.println("Before executing service method");//Pointcut to lớn execute on all the methods of classes in a package
Pointcut("within(com.thanhphodong.vn.service.*)")public void allMethodsPointcut()}
7. Ví dụ như với AOP JoinPoint cùng AdviceChúng ta thực hiện AOP cho những phương thức là set tất cả trong Employee model

123456789101112131415161718192021import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;
Before("execution(public void com.thanhphodong.vn.model..set*(*))")public void loggingAdvice(JoinPoint joinPoint)System.out.println("Before running loggingAdvice on method="+joinPoint.toString());System.out.println("Arguments Passed=" + Arrays.toString(joinPoint.getArgs()));//Advice arguments, will be applied lớn bean methods with single String argument
Before("args(name)")public void logStringArguments(String name)System.out.println("String argument passed="+name);}
EmployeeAfterAspect

8. Lấy ví dụ như với AOP After Aspect

Chúng ta sử dụng
After để chạy AOP khi method sẽ chạy xong

12345678910111213141516171819202122232425import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Aspect;


Xem thêm: Kiêm Tiếng Anh Là Gì ? Kiêm Trong Tiếng Anh Là Gì

After("args(name)")public void logStringArguments(String name)System.out.println("Running After Advice. String argument passed="+name);
AfterThrowing("within(com.thanhphodong.vn.Employee)")public void logExceptions(JoinPoint joinPoint)System.out.println("Exception thrown in Employee Method="+joinPoint.toString());
AfterReturning(pointcut="execution(* getName())", returning="returnString")public void getNameReturningAdvice(String returnString)System.out.println("getNameReturningAdvice executed. Returned String="+returnString);}
9. Lấy một ví dụ AOP Around Aspect
1234567891011121314151617181920import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;
Around("execution(* com.journaldev.spring.model.Employee.getName())")public Object employeeAroundAdvice(ProceedingJoinPoint proceedingJoinPoint)System.out.println("Before invoking getName() method");Object value = null;try value = proceedingJoinPoint.proceed(); catch (Throwable e) e.printStackTrace();System.out.println("After invoking getName() method. Return value="+value);return value;}
10. Tự tạo thành annotation aop pointcutNhư các em thấy trong Module Employee ta thấy một annotation là
Loggable đây đó là annotation do chúng ta tự tạo thành ra bằng phương pháp sau

12345package com.thanhphodong.vn;public
Loggable bắt đầu được chạy như sau

1234567891011import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;
annotation(com.thanhphodong.vn.Loggable)")public void myAdvice()System.out.println("Executing myAdvice!!");}

*
Play

Mọi fan hãy Subscribe kênh youtube sau đây nhé để cập nhật các đoạn clip mới độc nhất vô nhị về chuyên môn và kỹ năng mềm


*

*

*

*



Xem thêm: Hình Ảnh Trang Trí Các Góc Mầm Non Sáng Tạo Đẹp Nhất, Hướng Dẫn Trang Trí Góc Lớp Mầm Non

Về người sáng tác Blog tập trung những kỹ năng và kiến thức và phần đông trải nghiệm của anh ý về ngành phần mềm. Nhằm giúp đỡ các bạn học sinh, sinh viên gọi sâu hơn về nghề lập trình trải qua các khiếp nghiệm thực tiễn mà anh làm trong số doanh nghiệp Âu, Mỹ và Nhật. Trong Blog này anh có biến đổi nội dung một trong những kiến thức từ những blog nổi tiếng bằng tiếng Anh quý phái tiếng Việt nhằm mục đích giúp mọi bạn hiểu được nguyên lý dễ ợt hơn.
kimsa88
cf68