Spring AOP - XML Based PointCut
Điểm tham gia
JoinPoint đại diện cho một điểm trong ứng dụng của bạn nơi bạn có thể bổ sung khía cạnh AOP. Bạn cũng có thể nói, đó là nơi thực tế trong ứng dụng, nơi một hành động sẽ được thực hiện bằng cách sử dụng Spring AOP framework. Hãy xem xét các ví dụ sau:
Tất cả các lớp phương thức có trong (các) gói.
Một phương thức cụ thể của một lớp.
PointCut
PointCut là một tập hợp một hoặc nhiều JoinPoint, nơi một lời khuyên nên được thực thi. Bạn có thể chỉ định PointCuts bằng cách sử dụng các biểu thức hoặc mẫu như chúng ta sẽ thấy trong các ví dụ AOP của mình. Trong Spring, PointCut giúp sử dụng các JoinPoint cụ thể để áp dụng lời khuyên. Hãy xem xét các ví dụ sau:
biểu thức = "thực hiện (* com.tutorialspoint. *. * (..))"
biểu thức = "thực thi (* com.tutorialspoint.Student.getName (..))"
Cú pháp
<aop:config>
<aop:aspect id = "log" ref = "adviceClass">
<aop:PointCut id = "PointCut-id" expression = "execution( expression )"/>
</aop:aspect>
</aop:config>
Ở đâu,
adviceClass - ref của lớp chứa các phương thức tư vấn
PointCut-id - id của PointCut
execution( expression ) - Các phương pháp bao hàm biểu đạt mà lời khuyên sẽ được áp dụng.
Để hiểu các khái niệm được đề cập ở trên liên quan đến JoinPoint và PointCut, chúng ta hãy viết một ví dụ sẽ triển khai một số PointCuts. Để viết ví dụ của chúng tôi với một vài lời khuyên, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.
Bươc | Sự miêu tả |
---|---|
1 | Cập nhật dự án Sinh viên đã tạo theo chương Spring AOP - Ứng dụng . |
2 | Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới. |
Sau đây là nội dung của Logging.javatập tin. Đây thực sự là một mẫu mô-đun khía cạnh, xác định các phương thức được gọi ở nhiều điểm khác nhau.
package com.tutorialspoint;
public class Logging {
/**
* This is the method which I would like to execute
* before a selected method execution.
*/
public void beforeAdvice(){
System.out.println("Going to setup student profile.");
}
}
Sau đây là nội dung của Student.java tập tin.
package com.tutorialspoint;
public class Student {
private Integer age;
private String name;
public void setAge(Integer age) {
this.age = age;
}
public Integer getAge() {
System.out.println("Age : " + age );
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
System.out.println("Name : " + name );
return name;
}
public void printThrowException(){
System.out.println("Exception raised");
throw new IllegalArgumentException();
}
}
Sau đây là nội dung của MainApp.java tập tin.
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("Beans.xml");
Student student = (Student) context.getBean("student");
student.getName();
student.getAge();
}
}
Sau đây là tệp cấu hình Beans.xml.
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop = "http://www.springframework.org/schema/aop"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
<aop:config>
<aop:aspect id = "log" ref = "logging">
<aop:PointCut id = "selectAll"
expression = "execution(* com.tutorialspoint.*.*(..))"/>
<aop:before PointCut-ref = "selectAll" method = "beforeAdvice"/>
</aop:aspect>
</aop:config>
<!-- Definition for student bean -->
<bean id = "student" class = "com.tutorialspoint.Student">
<property name = "name" value = "Zara" />
<property name = "age" value = "11"/>
</bean>
<!-- Definition for logging aspect -->
<bean id = "logging" class = "com.tutorialspoint.Logging"/>
</beans>
Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.
Going to setup student profile.
Name : Zara
Going to setup student profile.
Age : 11
<Aop: pointcut> được định nghĩa ở trên chọn tất cả các phương thức được định nghĩa trong gói com.tutorialspoint. Giả sử, bạn muốn thực hiện lời khuyên của mình trước hoặc sau một phương thức cụ thể, bạn có thể định nghĩa PointCut của mình để thu hẹp việc thực thi bằng cách thay thế dấu sao (*) trong định nghĩa PointCut bằng tên lớp và phương thức thực tế. Sau đây là một tệp cấu hình XML được sửa đổi để hiển thị khái niệm.
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop = "http://www.springframework.org/schema/aop"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
<aop:config>
<aop:aspect id = "log" ref = "logging">
<aop:PointCut id = "selectAll"
expression = "execution(* com.tutorialspoint.Student.getName(..))"/>
<aop:before PointCut-ref = "selectAll" method = "beforeAdvice"/>
</aop:aspect>
</aop:config>
<!-- Definition for student bean -->
<bean id = "student" class = "com.tutorialspoint.Student">
<property name = "name" value = "Zara" />
<property name = "age" value = "11"/>
</bean>
<!-- Definition for logging aspect -->
<bean id = "logging" class = "com.tutorialspoint.Logging"/>
</beans>
Chạy dự án
Sau khi bạn hoàn tất việc tạo tệp nguồn và cấu hình, hãy chạy ứng dụng của bạn. Nhấp chuột phải vào MainApp.java trong ứng dụng của bạn và sử dụngrun as Java Applicationchỉ huy. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.
Going to setup student profile.
Name : Zara
Age : 11