English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
After returningهي نصحية في Spring AOP، وتُدعى عادةً بعد إكمال (تنفيذ) نقطة التفاعل. لا يتم إدعاءها إذا تم إطلاق استثناء. @AfterReturning التعليقات يتم تنفيذها بعد العودة إلى التطبيق. يتم تسمية الوظيفة كنصحية يجب تنفيذها قبل طريقة تغطية PointCut.
在返回的建议运行之后,当匹配的方法执行正常返回值时,便会执行该建议。我们在return属性中定义的名称必须与advice方法中的参数名称相对应。当方法返回值时,该值将作为相应的参数值传递到通知方法。
让我们在应用程序中返回通知后实现。
步骤1: 打开Spring Initializr http://start.spring.io 。
步骤2: 提供 Group 名称。我们提供了组名 com.w3codebox。
步骤3: 提供了 Artifact Id。提供Artifact Id aop-after-returning-advice-example。
步骤4: 添加 Spring Web 依赖项。
步骤5: 点击 إنشاء按钮。当我们单击"生成"按钮时,它将所有规范包装在 jar 文件中,并将其下载到本地系统。
步骤6: 提取
第7步: 使用以下步骤导入文件夹:
文件->导入->现有Maven项目->下一步->浏览文件夹 aop-returning-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 <?xml version="1.0" encoding="UTF-8"?> <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-returning-advice-example</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>aop-after-returning-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-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
الخطوة 9: في src/main/java مجلد في class com.w3codebox.model الحزمة.
الخطوة 10: في المجموعة في class com.w3codebox.model قم بإنشاء حزمة تسمى Account النوع.
في كلاس "Account"، قم بتنفيذ ما يلي:
تم تعريف متغيرين من نوع String accountNumber و accountType . انقر بزر الماوس الأيمن على الملف-> المصدر-> استخدم الحقول لإنشاء بناء الجسم إنشاء Getters.
انقر بزر الماوس الأيمن على الملف-> المصدر-> إنشاء Getters و Setters-> اختر Getters-> إنشاء إنشاء toString()
انقر بزر الماوس الأيمن على الملف-> المصدر-> إنشاء toString()...
Account.java
مكتبة com.w3codebox.model; public class Account { private String accountNumber; private String accountType; public Account(String accountNumber, String accountType) { super(); this.accountNumber = accountNumber; this.accountType = accountType; } public String getAccountType() { إرجاع accountType; } public String getAccountNumber() { إرجاع accountNumber; } @Override public String toString() { إرجاع "Account [accountNumber=" + accountNumber + ", accountType=" + accountType + "]"; } }
الخطوة 11: أنشئ مكتبة أخرى تُدعى مكتبة com.w3codebox.service.impl.
الخطوة 12: في هذا الملف، أنشئ ملفًا يُدعى كلاس AccountServiceImple.
في هذا الكلاس، نحدد خدمة الحساب.
AccountServiceImpl. Java
package com.w3codebox.service.impl; استيراد java.util.HashMap; استيراد java.util.Map; استيراد java.util.Map.Entry; استيراد java.util.Set; استيراد org.springframework.stereotype.Service; import com.w3codebox.model.Account; @Service public class AccountServiceImpl implements AccountService { //تخزين تفاصيل الحساب في HashMap private static Map<String, Account> map = null; static { map = new HashMap<>(); //إضافة تفاصيل الحساب في map map.put("M4546779", new Account("10441117000", "حساب التوفير")); map.put("K2434567", new Account("10863554577", "حساب الحالية")); } @Override public Account getAccountByCustomerId(String customerId) throws Exception { if(customerId == null) { throw new Exception("غير صالح! معرف العميل"); } Account account = null; Set<Entry<String, Account>> entrySet = map.entrySet(); for (Entry<String, Account> entry : entrySet) { if(entry.getKey().equals(customerId)) { account = entry.getValue(); } } return account; } }
الخطوة 13: في com.w3codebox.service.impl.في الملف AccountService الواجهة.
AccountService.java
package com.w3codebox.service.impl; import com.w3codebox.model.Account; //جارٍ إنشاء واجهة، إذا لم يتم العثور على معرف العميل فإنه يتم إطلاق استثناء public interface AccountService { public abstract Account getAccountByCustomerId(String customerId) throws Exception; }
الخطوة 14: إنشاء اسم مجموعة com.w3codebox.aspect.
الخطوة 15: في المجموعة com.w3codebox.aspect في إنشاء اسم AccountAspect النوع.
في هذا @AfterReturning. نحن نحدد أيضًا afterReturningAdvice()الطريقة.
ملاحظة: في المحددة في name(account) > returning الصفات يجب أن تكون متطابقة مع طريقة النصائحالاسم الموجود في 参数名称.
AccountAspect.java
package com.w3codebox.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; import com.w3codebox.model.Account; @Aspect @Component public class AccountAspect { //implementing after returning advice @AfterReturning(value="execution(* com.w3codebox.service.impl.AccountServiceImpl.*(..))",returning="account") public void afterReturningAdvice(JoinPoint joinPoint, Account account) { System.out.println("After Returing method:"+joinPoint.getSignature()); System.out.println(account); } }
الخطوة 16: فتح AopAfterReturningAdviceExampleApplication.java ملف وأضف العلامات. @EnableAspectJAutoProxy.
دعم العلامات الحالية لمعالجة AspectJ @Aspect مكونات التعليق. يستخدم مع علامة التبويب @Configuration.
لقد استخدمنا التعليق @EnableAspectJAutoProxy proxyTargetClass الخصائص. الخصائص proxyTargetClass = true يُمكّننا من استخدام CGLIB (مكتبة إنشاء الكود) وسيط، بدلاً من طريقة وسيط JDK القياسية القائمة على الواجهات.
ConfigurableApplicationContext هي واجهة، بالإضافة إلى طرق العملاء لـ ApplicationContext في تطبيقApplicationContext، توفر أيضًا أدوات لضبط بيئة التطبيق.
AopAfterReturningAdviceExampleApplication.java
package com.w3codebox; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.EnableAspectJAutoProxy; import com.w3codebox.model.Account; import com.w3codebox.service.impl.AccountService; import com.w3codebox.service.impl.AccountServiceImpl; @SpringBootApplication //@EnableSpectProxy الملاحظة تدعم معالجة المكونات المميزة بواسطة @Aspect. إنها مشابهة للعلامات في تكوين xml. @EnableAspectJAutoProxy(proxyTargetClass=true) public class AopAfterReturningAdviceExampleApplication { public static void main(String[] args) { ConfigurableApplicationContext ac = SpringApplication.run(AopAfterReturningAdviceExampleApplication.class, args); //من خلال سياق التطبيق الحاصل على كائن account AccountService accountService = ac.getBean("accountServiceImpl", AccountServiceImpl.class); Account account; try { account = accountService.getAccountByCustomerId("K2434567"); if(account != null) System.out.println(account.getAccountNumber()+"\t"+account.getAccountType()); } catch (Exception e) { System.out.println(e.getMessage()); } } }
بعد إنشاء جميع الكلاسات والمكتبات، يبدو مجلد المشروع كما يلي:
الخطوة 17: فتح AopAfterReturningAdviceExampleApplication.java ملف وكنه تطبيق Java، ويظهر الناتج كما يلي:
في القسم التالي، سنفهم بعد تقديم المشورة.