Ví dụ Spring AOP

Có những ví dụ về triển khai AOP (dựa trên dtd) của Spring1.2 .

Mặc dù nó được hỗ trợ vào Spring 3, nhưng nên sử dụng aop Spring với khía cạnhJ mà chúng ta sẽ tìm hiểu trong trang tiếp theo.

lap-trinh-java-Spring
lap-trinh-java-Spring

Có 4 loại lời khuyên được hỗ trợ trong việc thực hiện aop kiểu cũ1.2.

  1. Trước khi Tư vấn, nó được thực thi trước khi gọi phương thức thực tế.
  2. Sau lời khuyên, nó được thực thi sau khi gọi phương thức thực tế. Nếu phương thức trả về một giá trị, nó được thực thi sau khi trả về giá trị.
  3. Xung quanh Lời khuyên, nó được thực thi trước và sau khi gọi phương thức thực tế.
  4. Ném lời khuyên Nó được thực thi nếu phương thức thực tế ném ngoại lệ.

Hiểu thứ bậc của các giao diện tư vấn

Hãy hiểu hệ thống phân cấp lời khuyên theo sơ đồ được đưa ra dưới đây:

Tất cả đều là giao diện trong aop.

Giao diện Phương thứcB BeforeAdvice mở rộng giao diện BeforeAdvice .

Giao diện AfterReturnAdvice mở rộng giao diện AfterAdvice .

Giao diện ThrowsAdvice mở rộng giao diện AfterAdvice .

Giao diện MethodInterceptor mở rộng giao diện Interceptor . Nó được sử dụng trong lời khuyên xung quanh.

1) Ví dụ về Phương thứcB BeforeAdvice

Tạo một lớp có chứa logic kinh doanh thực tế.Tập tin: A.java

  1. gói  com.javatpoint;  
  2. công lớp  A {   
  3. công khai void  m () {System.out.println ( “logic kinh doanh thực tế” );}   
  4. }  

Bây giờ, tạo lớp trình cố vấn thực hiện giao diện Phương thứcB BeforeAdvice.Tập tin: BeforeIDIA.java

  1. gói  com.javatpoint;  
  2. nhập  java.lang.reflect.Method;  
  3. nhập  org.springframework.aop.MethodB BeforeAdvice;  
  4. lớp công khai  BeforeIDIA  thực hiện  Phương thứcB BeforeAdvice {   
  5.     @Ghi đè  
  6.     công khoảng trống  trước (phương pháp Phương pháp, Object [] args, Object target) throws  Throwable {   
  7.         System.out.println ( “mối quan tâm bổ sung trước logic thực tế” );  
  8.     }  
  9. }  

Trong tệp xml, tạo 3 hạt, một cho lớp A, thứ hai cho lớp Advisor và thứ ba cho lớp ProxyFactoryBean .Tệp: applicationContext.xml

  1. <? xml phiên bản = “1.0”  mã hóa = “UTF-8” ?>  
  2. <đậu  
  3.     xmlns = “http://www.springframework.org/schema/beans”  
  4.     xmlns: xsi = “http://www.w3.org/2001/XMLSchema-instance”  
  5.     xmlns: p = “http://www.springframework.org/schema/p”  
  6.     xsi: lượcLocation = “http: //www.springframework.org/schema/beans   
  7. http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd “>  
  8.   
  9. <bean id = “obj” class = “com.javatpoint.A” > </ bean>   
  10. <bean id = “ba” class = “com.javatpoint.B BeforeIDIA” > </ bean>   
  11.   
  12. <bean id = “proxy” class = “org.springframework.aop.framework.ProxyFactoryBean” >   
  13. <property name = “target”  ref = “obj” > </ property>  
  14. <property name = “interceptorNames” >  
  15. <danh sách>  
  16. <giá trị> ba </ value>  
  17. </ danh sách>  
  18. </ tài sản>  
  19. </ đậu>  
  20.   
  21. </ đậu>  

Hiểu về lớp ProxyFactoryBean:

Lớp ProxyFactoryBean được cung cấp bởi Spring Famework. Nó chứa 2 thuộc tính đích và tên chặn. Thể hiện của lớp A sẽ được coi là đối tượng đích và thể hiện của lớp cố vấn là đánh chặn. Bạn cần truyền đối tượng advisor làm đối tượng danh sách như trong tệp xml đã cho ở trên.

Lớp ProxyFactoryBean được viết như thế này:

  1. lớp công khai  ProxyFactoryBean {   
  2.  mục tiêu đối tượng riêng tư ;  
  3.  Danh sách cá nhân đánh chặnNames;  
  4. // getters và setters  
  5. }  

Bây giờ, hãy gọi phương thức thực tế.Tệp: Test.java

  1. gói  com.javatpoint;  
  2. nhập  org.springframework.beans.factory.BeanFactory;  
  3. nhập  org.springframework.beans.factory.xml.XmlBeanFactory;  
  4. nhập  org.springframework.core.io.ClassPathResource;  
  5. nhập  org.springframework.core.io.Resource;  
  6.  Kiểm tra lớp học công cộng {   
  7. public static void  main (String [] args) {    
  8.     Tài nguyên r = new  ClassPathResource ( “applicationContext.xml” );  
  9.     Nhà máy BeanFactory = new  XmlBeanFactory (r);  
  10.       
  11.     A a = Factory.getBean ( “proxy” , lớp A. );  
  12.     là();  
  13. }  
  14. }  

Đầu ra

  1. mối quan tâm bổ sung trước logic thực tế  
  2. logic kinh doanh thực tế  

In thông tin bổ sung trong Phương thứcB BeforeAdvice

Chúng ta có thể in thêm thông tin như tên phương thức, đối số phương thức, đối tượng đích, tên lớp đối tượng đích, lớp proxy, v.v.

Bạn chỉ cần thay đổi hai lớp BeforeIDIA.java và Test.java.Tập tin: BeforeIDIA.java

  1. gói  com.javatpoint;  
  2. nhập  java.lang.reflect.Method;  
  3. nhập  org.springframework.aop.MethodB BeforeAdvice;  
  4.   
  5. lớp công khai  BeforeIDIA  thực hiện  Phương thứcB BeforeAdvice {   
  6.     @Ghi đè  
  7.     công khoảng trống  trước (phương pháp Phương pháp, Object [] args, Object target) throws  Throwable {   
  8.         System.out.println ( “mối quan tâm bổ sung trước logic thực tế” );  
  9.         System.out.println ( “thông tin phương thức:” + method.getName () + “” + method.getModifier ());  
  10.         System.out.println ( “thông tin đối số:” );  
  11.         for (Object arg: args)  
  12.             System.out.println (arg);  
  13.         System.out.println ( “Đối tượng mục tiêu:” + đích);  
  14.         System.out.println ( “tên lớp đối tượng đích:” + target.getClass (). GetName ());  
  15.     }  
  16. }  

Tệp: Test.java

  1. gói  com.javatpoint;  
  2. nhập  org.springframework.beans.factory.BeanFactory;  
  3. nhập  org.springframework.beans.factory.xml.XmlBeanFactory;  
  4. nhập  org.springframework.core.io.ClassPathResource;  
  5. nhập  org.springframework.core.io.Resource;  
  6.  Kiểm tra lớp học công cộng {   
  7. public static void  main (String [] args) {    
  8.     Tài nguyên r = new  ClassPathResource ( “applicationContext.xml” );  
  9.     Nhà máy BeanFactory = new  XmlBeanFactory (r);  
  10.       
  11.     A a = Factory.getBean ( “proxy” , lớp A. );  
  12.         System.out.println ( “tên lớp proxy:” + a.getClass (). GetName ());  
  13.     là();  
  14. }  
  15. }  

Đầu ra

  1.  Tên lớp proxy  : com.javatpoint.A $$ EnhancerByCGLIB $$ 409872b1  
  2. mối quan tâm bổ sung trước logic thực tế  
  3. thông tin phương pháp: m  1  
  4. thông tin đối số:  
  5. Đối tượng mục tiêu: com.javatpoint.A @ 11dba45  
  6.  tên lớp đối tượng đích  : com.javatpoint.A  
  7. logic kinh doanh thực tế  

2) Ví dụ AfterReturnAdvice

Tạo một lớp có chứa logic kinh doanh thực tế.Tập tin: A.java

Giống như trong ví dụ trước.

Bây giờ, tạo lớp trình cố vấn thực hiện giao diện AfterReturnAdvice.Tập tin: AfterIDIA.java

  1. gói  com.javatpoint;  
  2. nhập  java.lang.reflect.Method;  
  3. nhập  org.springframework.aop.AfterReturnAdvice;  
  4. lớp công cộng  AfterIDIA  thực hiện  AfterReturnAdvice {   
  5.     @Ghi đè  
  6.     khoảng trống công khai sau khi  quay lại (Object returnValue, Phương thức phương thức,   
  7.          Object [] args, Object object)  ném  throwable {  
  8.           
  9.         System.out.println ( “mối quan tâm bổ sung sau khi trả lại lời khuyên” );  
  10.     }  
  11.   
  12. }  

Tạo tệp xml như trong ví dụ trước, bạn chỉ cần thay đổi lớp trình cố vấn ở đây.Tệp: applicationContext.xml

  1. <? xml phiên bản = “1.0”  mã hóa = “UTF-8” ?>  
  2. <đậu  
  3.     xmlns = “http://www.springframework.org/schema/beans”  
  4.     xmlns: xsi = “http://www.w3.org/2001/XMLSchema-instance”  
  5.     xmlns: p = “http://www.springframework.org/schema/p”  
  6.     xsi: lượcLocation = “http: //www.springframework.org/schema/beans   
  7. http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd “>  
  8.   
  9. <bean id = “obj” class = “com.javatpoint.A” > </ bean>   
  10. <bean id = “ba” class = “com.javatpoint.AfterIDIA” > </ bean>   
  11.   
  12. <bean id = “proxy” class = “org.springframework.aop.framework.ProxyFactoryBean” >   
  13. <property name = “target”  ref = “obj” > </ property>  
  14. <property name = “interceptorNames” >  
  15. <danh sách>  
  16. <giá trị> ba </ value>  
  17. </ danh sách>  
  18. </ tài sản>  
  19. </ đậu>  
  20.   
  21. </ đậu>  

Tệp: Test.java

Giống như trong ví dụ trước.

Đầu ra

  1. logic kinh doanh thực tế  
  2. quan tâm thêm sau khi trở lại lời khuyên  

3) Ví dụ về Phương thức (Công cụ tìm kiếm)

Tạo một lớp có chứa logic kinh doanh thực tế.Tập tin: A.java

Giống như trong ví dụ trước.

Bây giờ, tạo lớp trình cố vấn thực hiện giao diện MethodInterceptor.Tập tin: SurroundIDIA.java

  1. gói  com.javatpoint;  
  2. nhập  org.aopalliance.intercept.MethodInterceptor;  
  3. nhập  org.aopalliance.intercept.MethodInvocation;  
  4. lớp công cộng  Xung quanh triển khai Phương thứcInterceptor   {   
  5.   
  6.     @Ghi đè  
  7.      Đối tượng công khai gọi (Phương thức truyền dẫn mi)  ném  throwable {  
  8.         Đối tượng obj;  
  9.         System.out.println ( “mối quan tâm bổ sung trước logic thực tế” );  
  10.         obj = mi.proceed ();  
  11.         System.out.println ( “mối quan tâm bổ sung sau logic thực tế” );  
  12.         trở lại  obj;  
  13.     }  
  14.   
  15. }  

Tạo tệp xml như trong ví dụ trước, bạn chỉ cần thay đổi lớp trình cố vấn ở đây.Tệp: applicationContext.xml

  1. <? xml phiên bản = “1.0”  mã hóa = “UTF-8” ?>  
  2. <đậu  
  3.     xmlns = “http://www.springframework.org/schema/beans”  
  4.     xmlns: xsi = “http://www.w3.org/2001/XMLSchema-instance”  
  5.     xmlns: p = “http://www.springframework.org/schema/p”  
  6.     xsi: lượcLocation = “http: //www.springframework.org/schema/beans   
  7. http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd “>  
  8.   
  9. <bean id = “obj” class = “com.javatpoint.A” > </ bean>   
  10. <bean id = “ba” class = “com.javatpoint.AroundIDIA” > </ bean>   
  11.   
  12. <bean id = “proxy” class = “org.springframework.aop.framework.ProxyFactoryBean” >   
  13. <property name = “target”  ref = “obj” > </ property>  
  14. <property name = “interceptorNames” >  
  15. <danh sách>  
  16. <giá trị> ba </ value>  
  17. </ danh sách>  
  18. </ tài sản>  
  19. </ đậu>  
  20.   
  21. </ đậu>  

Tệp: Test.java

Giống như trong ví dụ trước.

Đầu ra

  1. mối quan tâm bổ sung trước logic thực tế  
  2. logic kinh doanh thực tế  
  3. mối quan tâm bổ sung sau logic thực tế  

4) Ví dụ về ném

Tạo một lớp có chứa logic kinh doanh thực tế.Tập tin: Validator.java

  1. gói  com.javatpoint;  
  2.  Trình xác thực lớp công khai {   
  3.     công khai void void  ( int  age) ném  Ngoại lệ {   
  4.         nếu (tuổi < 18 ) {  
  5.             ném  số học mới Exception ( “Không hợp lệ tuổi” );   
  6.         }  
  7.         khác {  
  8.             System.out.println ( “xác nhận bỏ phiếu” );  
  9.         }  
  10.     }  
  11. }  

Bây giờ, tạo lớp trình cố vấn thực hiện giao diện ThrowsAdvice.Tập tin: ThrowsIDIA.java

  1. gói  com.javatpoint;  
  2. nhập  org.springframework.aop.ThrowsAdvice;  
  3. lớp công khai  ThrowsIDIA  thực hiện  ThrowsAdvice {   
  4.     công trống  afterThrowing (Exception ex) {   
  5.         System.out.println ( “mối quan tâm bổ sung nếu xảy ra ngoại lệ” );  
  6.     }  
  7. }  

Tạo tệp xml như trong ví dụ trước, bạn chỉ cần thay đổi lớp Trình xác thực và lớp trình cố vấn.Tệp: applicationContext.xml

  1. <? xml phiên bản = “1.0”  mã hóa = “UTF-8” ?>  
  2. <đậu  
  3.     xmlns = “http://www.springframework.org/schema/beans”  
  4.     xmlns: xsi = “http://www.w3.org/2001/XMLSchema-instance”  
  5.     xmlns: p = “http://www.springframework.org/schema/p”  
  6.     xsi: lượcLocation = “http: //www.springframework.org/schema/beans   
  7. http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd “>  
  8.   
  9. <bean id = “obj” class = “com.javatpoint.Validator” > </ bean>   
  10. <bean id = “ba” class = “com.javatpoint.ThrowsIDIA” > </ bean>   
  11.   
  12. <bean id = “proxy” class = “org.springframework.aop.framework.ProxyFactoryBean” >   
  13. <property name = “target”  ref = “obj” > </ property>  
  14. <property name = “interceptorNames” >  
  15. <danh sách>  
  16. <giá trị> ba </ value>  
  17. </ danh sách>  
  18. </ tài sản>  
  19. </ đậu>  
  20.   
  21. </ đậu>  

Tệp: Test.java

  1. gói  com.javatpoint;  
  2.   
  3. nhập  org.springframework.beans.factory.BeanFactory;  
  4. nhập  org.springframework.beans.factory.xml.XmlBeanFactory;  
  5. nhập  org.springframework.core.io.ClassPathResource;  
  6. nhập  org.springframework.core.io.Resource;  
  7.   
  8.  Kiểm tra lớp học công cộng {   
  9. public static void  main (String [] args) {    
  10.     Tài nguyên r = new  ClassPathResource ( “applicationContext.xml” );  
  11.     Nhà máy BeanFactory = new  XmlBeanFactory (r);  
  12.       
  13.     Trình xác thực v = Factory.getBean ( “proxy” , lớp Trình xác thực );  
  14.     thử {  
  15.     v.validate ( 12 );  
  16.     } Catch (Ngoại lệ e) {e.printStackTrace ();}  
  17. }  
  18. }  

Đầu ra

  1. java.lang.ArithaturesException: Không hợp lệ Tuổi  
  2.   
  3. quan tâm thêm  nếu  ngoại lệ xảy ra  
  4.   
  5.     tại com.javatpoint.Validator.validate (Validator.java: 7 )  
  6.     tại com.javatpoint.Validator $$ FastClassByCGLIB $$ 562915cf.invoke (<tạo>)  
  7.     tại net.sf.cglib.proxy.MethodProxy.invoke (Phương thứcProxy.java: 191 )  
  8.     tại org.springframework.aop.framework.Cglib2AopProxy $ CglibMethodInvocation.invoke  
  9. Điểm tham gia (Cglib2AopProxy.java: 692 )  
  10.     tại org.springframework.aop.framework.ReflectiveMethodInvocation.  
  11. tiến hành (ReflectMethodInvocation.java: 150 )  
  12.     tại org.springframework.aop.framework.ad CHƯƠNG.ThrowsAdviceInterceptor.  
  13. gọi (ThrowsAdviceInterceptor.java: 124 )  
  14.     tại org.springframework.aop.framework.ReflectiveMethodInvocation.  
  15. tiến hành (ReflectMethodInvocation.java: 172 )  
  16.     tại org.springframework.aop.framework.Cglib2AopProxy $ DynamicA mẹoedInterceptor.  
  17. đánh chặn (Cglib2AopProxy.java: 625 )  
  18.     tại com.javatpoint.Validator $$ EnhancerByCGLIB $$ 4230ed28.validate (<tạo>)  
  19.     tại com.javatpoint.Test.main (Test.java: 15 )  

Bài viết gần đây

Java Lambda: Hướng dẫn cho người mới bắt đầu

Bài viết này giải thích các biểu thức Java Lambda trong Java 8. Biểu thức Lambda Java

Ví dụ về Tải xuống tệp từ máy chủ bằng cách sử dụng JSP

Trong ví dụ này, chúng tôi sẽ tải xuống tệp jsp. Nhưng bạn có thể tải xuống bất kỳ tập tin. 

Hướng dẫn sử dụng Spring JdbcTemplate

Spring JdbcTemplate là một cơ chế mạnh mẽ để kết nối với cơ sở dữ liệu và thực hiện các truy vấn SQL. Nó sử...

Hướng dẫn chủ đề Java

Một Instance of Thread là một đối tượng giống như bất kỳ đối tượng nào khác trong Java và nó chứa các biến và...

Tải tập tin lên máy chủ bằng cách sử dụng JSP

Có nhiều cách để tải tệp lên máy chủ. Một trong những cách là bởi lớp MultipartRequest. Để sử dụng lớp này,...

Ví dụ cấu hình Spring AOP AspectJ Xml

Spring cho phép bạn xác định các khía cạnh, lời khuyên và điểm nhấn trong tệp xml. Trong trang...

Leave a reply

Please enter your comment!
Please enter your name here