English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SpringBoot AOP的After Advice用于实现交叉。这是一种建议类型,可确保建议在方法执行后运行。我们使用 @After 注解来实现事后建议。
让我们通过一个示例来理解事后建议。
步骤1: 打开Spring Initializr http://start.spring.io 。
步骤2: 提供 Group 名称。我们提供了组名 com.w3codebox。
步骤3: 提供了 Artifact Id。提供Artifact Id aop-after-advice-example。
步骤4: 添加 Spring Web 依赖项。
步骤5: 点击 生成按钮。当我们单击"生成"按钮时,它将所有规范包装在 jar 文件中,并将其下载到本地系统。
步骤6: 提取下载的jar文件。
步骤7: 通过以下步骤导入文件夹:
文件->导入->现有Maven项目->下一步->浏览文件夹 aop-after-advice-example ->完成。
步骤8: فتح pom.xml 文件并添加以下 AOP 依赖项。它是使用 Spring AOP و AspectJ 进行面向方面编程的入门。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> </dependencies>
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.w3codebox</groupId> <artifactId> aop-after-advice-example</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>aop-after-advice-example</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
步骤9: فتح AopAfterAdviceExampleApplication.java 文件,并添加注解 @EnableAspectJAutoProxy。
@EnableAspectJAutoProxy(proxyTargetClass=true)
它支持处理带有AspectJ的 @Aspect 批注的组件。它与@Configuration批注一起使用。我们可以使用 proxyTargetClass 属性来控制代理的类型。其默认值为 false 。
AopAfterAdviceExampleApplication.java
package com.w3codebox; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.EnableAspectJAutoProxy; @SpringBootApplication @EnableAspectJAutoProxy(proxyTargetClass=true) public class AopAfterAdviceExampleApplication { public static void main(String[] args) { SpringApplication.run(AopAfterAdviceExampleApplication.class, args); } }
步骤10: إنشاء اسم com.w3codebox.model的包。
步骤11: في المجلد com.w3codebox.model下创建一个类。 قمنا بإنشاء كلاس يُدعى Employee的类。 在类中,定义以下内容:
定义三个String类型的变量 empId،firstName,و secondName 。 生成Getters and Setters。 创建default
Employee.java
package com.w3codebox.model; public class Employee { private String empId; private String firstName; private String secondName; //默认构造函数 public Employee() { } public String getEmpId() { return empId; } public void setEmpId(String empId) { this.empId = empId; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getSecondName() { return secondName; } public void setSecondName(String secondName) { this.secondName = secondName; } }
الخطوة 12: أنشئ كلاس باسم مجلد com.w3codebox.controller.
الخطوة 13: في المجلد أنشئ كلاس تحكم تحت مجلد com.w3codebox.controller. قمنا بإنشاء كلاس يُدعى كلاس EmployeeController.
في كلاس التحكم، قمنا بتعريف اثنين من الخرائط، واحد لاضافة الموظف، والآخر لحذف الموظف.
EmployeeController.java
package com.w3codebox.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.w3codebox.model.Employee; import com.w3codebox.service.EmployeeService; @RestController public class EmployeeController { @Autowired private EmployeeService employeeService; @RequestMapping(value = "/add/employee", method = RequestMethod.GET) public com.w3codebox.model.Employee addEmployee(@RequestParam("empId") String empId, @RequestParam("firstName") String firstName, @RequestParam("secondName") String secondName) { return employeeService.createEmployee(empId, firstName, secondName); } @RequestMapping(value = "/remove/employee", method = RequestMethod.GET) public String removeEmployee(@RequestParam("empId") String empId) { employeeService.deleteEmployee(empId); return "Employee removed"; } }
الخطوة 14: إنشاء اسم مكتبة com.w3codebox.service.
الخطوة 15: في المجلد إنشاء فئة Service تحت مجلد com.w3codebox.service. قمنا بإنشاء كلاس يُدعى فئة EmployeeService.
في فئة Service، نحدد طريقتين createEmployee و deleteEmployee.
EmployeeService .java
package com.w3codebox.service; import org.springframework.stereotype.Service; import com.w3codebox.model.Employee; @Service public class EmployeeService { public Employee createEmployee(String empId, String fname, String sname) { Employee emp = new Employee(); emp.setEmpId(empId); emp.setFirstName(fname); emp.setSecondName(sname); return emp; } public void deleteEmployee(String empId) { } }
الخطوة 16: إنشاء اسم مكتبة com.w3codebox.aspect.
الخطوة 17: في المجلد إنشاء كلاس جانب في مجلد com.w3codebox.aspect. قمنا بإنشاء كلاس يُدعى كلاس EmployeeServiceAspect.
في كلاس الجانب، قمنا بتعريف منطق النصيحة بعد.
EmployeeServiceAspect.java
package com.w3codebox.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.After; import org.springframework.stereotype.Component; @Aspect @Component public class EmployeeServiceAspect { @After(value = "execution(* com.w3codebox.service.EmployeeService.*(..)) and args(empId, fname, sname)") public void afterAdvice(JoinPoint joinPoint, String empId, String fname, String sname) { System.out.println("After method:" + joinPoint.getSignature()); System.out.println("Creating Employee with first name - " + fname + " second name - " + sname + " and id - " + empId); } }
في الكلاس التالي:
execution(expression): التعبير هو طريقة يمكن تطبيق النصيحة عليها. @After: باستخدام @After تُنفذ الطريقة المزودة بالتعليقات التوضيحية بعد تطابق تعبير النقطة الداخلية مع جميع الطرق.
بعد إنشاء جميع الوحدات، يبدو مجلد المشروع كالتالي:
لقد قمنا بضبط جميع الوحدات. الآن سنقوم بتشغيل التطبيق.
الخطوة 18: فتح AopAfterAdviceExampleApplication.java ملف واستخدامه كتطبيق Java.
الخطوة 19: افتح المتصفح واطلع على URL التالية: http://localhost:8080/add/employee?empId={id}&firstName={fname}&secondName={sname}
في URL السابق، /add/employee هي التي أنشأناها في الصنف Controller. استخدمنا علامتين فاصلة (؟)و (&)للفصل بين القيمتين.
في الناتج السابق، قمنا بتعيين emId 102،firstName = Sachin،و secondName = Bansal.
لنرى الشاشة التالية. نحن نرى أننا في وقت التشغيل، EmployeeService الصف createEmployee بعد طريقة EmployeeServiceAspect طريقة في الصنف afterAdvice()كما هو موضح في الشكل التالي.
بالمثل، يمكننا حذف الموظف من خلال إرسال URL http://localhost:8080/remove/employee?empId=102. سيقوم بإرجاع رسالة الموظفون المفصلين، كما هو موضح في الشكل التالي.
في هذا الفصل، تعلمنا كيفية عمل After Advice. في الفصل التالي، سنتعلم حول Around Advice.