Aop là gì

Để hiểu rõ hơn về Spring:

Spring phần 1: Spring là gì ? Giới thiệu Spring Framework trong JavaSpring phần 2: Cài đặt Spring Tool Suite Cho Eclipse

Và cùng đến với Series Spring Core:

Spring Core – Phần 1: Spring IoC , Inversion of Control trong SpringSpring Core – Phần 2: Spring Bean, Các scope trong Spring, Spring Bean ScopeSpring Core – Phần 3: Spring Dependency Injection, DI trong Spring, so sánh CI – SISpring Core – Phần 4: Spring Dependency Injection với Object, Collections, MapSpring Core – Phần 5: Spring AOP là gì? code ví dụ với Spring AOPSpring Core – Phần 6: AspectJ là gì? Spring AOP + AspectJ ví dụ với AspectJSpring Core: Phần 7 – Spring PropertyPlaceholderConfigurer, lấy dữ liệu từ file propertiesSpring Core – Phần 8: Autowiring trong Spring, annotation
Autowired trong Spring, các kiểu autowiringSpring Core – Phần 9: Spring Auto Component Scanning, Các annotation hay dùng trong SpringCode ví dụ Spring đọc file từ resource folder (resources)Code ví dụ gửi email – gmail với Spring

1. Spring AOP là gì?

Aspect Oriented Programming(AOP) là 1 kỹ thuật lập trình dùng để tách logic chương trình thành các phần riêng biệt…Trong Spring AOP, có 4 loại advice được hỗ trợ:Before advice: chạy trước khi method được thực thiAfter returning advice: Chạy sau khi method trả về một kết quảAfter throwing adivce: Chạy khi method ném ra một exceptionAround advice: Chạy khi method được thực thi (Bao gồm cả 3 loại advice trên)Ở bài trước mình đã giới thiệu rõ AOP là gì, tác dụng và đặc điểm của nó nên trong bài này mình sẽ chủ yếu tập trung vào cách thực thi AOP trong Spring.

Bạn đang xem: Aop là gì

2.

Xem thêm: " Key Là Gì Trong Tiếng Anh? Nghĩa Của Từ Key Trong Tiếng Việt

Code ví dụ với Spring AOP.

Nhắc lại một chút về một số khái nhiệm và thuật ngữ trong AOP với Spring (Phần này hơi trừu tượng một chút, các bạn đối chiếu với ví dụ bên dưới để hiểu hơn)Join point: là các điểm trong chương trình ví dụ điểm thực thi method (method execution), điểm xử lý excpetion, field access… Spring chỉ hỗ trợ method execution join pointAdvice: một hành động thực hiện ở joint pointPointcut: Là expression language giúp khớp nối với joint pointIntroduction: Cho phép introduce các new interface tới bất kì object adviced nào.Target Object: Object sẽ được advicedAspect: là một class bao gồm các advice và các joint pointInterceptor: là một aspect chỉ có duy nhất một adviceAOP Proxy: dùng để cài đặt các AspectWeaving: là tiến trình nối các aspect với các object, types để tạo nên advised object.Spring Core - Phần 5: Spring AOP là gì? code ví dụ với Spring AOPVí dụ kinh điểnvới AOP mà ta hay dùng đó là chương trình thực hiện log.Bây giờ mình sẽ tạo 1 class với các method, sau đó áp dụng AOP để thực hiện log các method của class theo cả 4 loại advice:Khai báo các thư viện để sử dụng applicationContext, bean, aop trong spring: org.springframework spring-beans 4.3.13.RELEASE org.springframework spring-context 4.3.13.RELEASE org.springframework spring-aop 4.3.13.RELEASETạo class Hello.java với 3 method:public class Hello { public void method1() { System.out.println("+++++++++++++++++++++++++++++++"); System.out.println("method 1"); } public void method2() { System.out.println("+++++++++++++++++++++++++++++++"); System.out.println("method 2"); } public void method3() { System.out.println("+++++++++++++++++++++++++++++++"); System.out.println("method 3"); throw new IllegalArgumentException(); }}applicationContext.xml Demo:public static void main(String<> args) throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Hello hello = (Hello) context.getBean("hello"); hello.method1(); hello.method2();}Kết quả:+++++++++++++++++++++++++++++++method 1+++++++++++++++++++++++++++++++method 2Áp dụng before adviceTạo classDemoBeforeAdvice.java định nghĩa hành động trước khi cách method của class Hello được chạy:public class DemoBeforeAdvice implements MethodBeforeAdvice { public void before(Method method, Object<> args, Object target) throws Throwable { System.out.println("before method: " + method.getName()); }}MethodBeforeAdvice: là một aspectđồng thời cũng là mộtInterceptor vì nó chỉ có 1 adviceDemoBeforeService: là một AOP proxy, nó cài đặt lại aspect làMethodBeforeAdviceaplicationContext.xml demoBeforeAdvice target object sẽ là đối tượng hello.Demo:public static void main(String<> args) throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Hello hello = (Hello) context.getBean("helloProxy"); hello.method1(); hello.method2();}Kết quả:before method: method1+++++++++++++++++++++++++++++++method 1before method: method2+++++++++++++++++++++++++++++++method 2Tương tự mình sẽ tạo các proxy thực hiện cài đặt After returning advice, After throwing adivce, Around advice:import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;public class DemoAfterAdvice implements AfterReturningAdvice { public void afterReturning(Object returnValue, Method method, Object<> args, Object target) throws Throwable { System.out.println("after method: " + method.getName()); }}import org.springframework.aop.ThrowsAdvice;public class DemoThrowAdvice implements ThrowsAdvice { public void afterThrowing(IllegalArgumentException e) throws Throwable { System.out.println("throw advice method: " ); }}import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;public class DemoAroundAdvice implements MethodInterceptor { public Object invoke(MethodInvocation invocation) throws Throwable { // same with MethodBeforeAdvice System.out.println("around - before method: " + invocation.getMethod().getName()); try { // proceed to original method call Object result = invocation.proceed(); // same with AfterReturningAdvice System.out.println("around - before method: " + invocation.getMethod().getName()); return result; } catch (IllegalArgumentException e) { // same with ThrowsAdvice System.out.println("around - throw advice method: " + invocation.getMethod().getName()); throw e; } }}applicationContext.xml demoBeforeAdvice demoAfterAdvice demoThrowAdvice demoAroundAdvice Demo:import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp { public static void main(String<> args) throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Hello hello = (Hello) context.getBean("helloProxy"); hello.method1(); System.out.println("\n"); hello.method2(); System.out.println("\n"); hello.method3(); }}Kết quả:before method: method1around - before method: method1+++++++++++++++++++++++++++++++method 1around - before method: method1after method: method1before method: method2around - before method: method2+++++++++++++++++++++++++++++++method 2around - before method: method2after method: method2before method: method3around - before method: method3+++++++++++++++++++++++++++++++method 3around - throw advice method: method3throw advice method: Exception in thread "main" java.lang.IllegalArgumentExceptionOkay, Done!Các bạn có thể download code ví dụ trên tại đâyLoạt bài chủ đềJavatrên trang stackjava.com bản quyền thuộcthầy Trần Hữu Cương. Bài viết đăng trên blog realchampionshipwrestling.com được sự đồng ý của tác giả.Thầy Trần HữuCương đã và đang tham gia giảng dạy tại Techmater khoáLộ trình Java Spring Boot Full StackLink gốc bài viếttại đây.
| W88Vuive | xosoketqua.com | jun88