English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SpringBoot AOP @AfterThrowing

After throwing هو نوع التوصية في Spring AOP. إذا أثار الطريقة استثناءًا، فإنه يضمن تشغيل التوصية. نستخدم @AfterThrowing استخدام العلامة التوضيحية لتحقيق التوصية بعد الارتفاع.

النحو:

@AfterThrowing(PointCut="execution(expression) ", throwing="name")

من حيث:

PointCut: اختر دالة.

execution(expression):

throwing: اسم الاستثناء الذي سيتم إرجاعه.

نحن نقوم بتنفيذ التوصية after-throwing في التطبيق.

مثال Spring Boot @AfterThrowing

سنستخدم في هذا القسم الأمثلة السابقة. يمكنك تنزيل المشروع أو إجراء بعض التغييرات في الأمثلة السابقة.

الخطوة 1: افتح Spring Initializr http://start.spring.io .

الخطوة 2: يقدم المجموعةالاسم. قمنا بتقديم اسم مجموعة com.w3codebox.

الخطوة 3: يقدم Artifact Id.يقدم Artifact Id aop-after-throwing-advice-example...

الخطوة 4: إضافة Spring Web الإعتمادات.

الخطوة 5: النقر إنشاءالزر. عند النقر على زر "إنشاء"، يقوم بغمس جميع المواصفات في jar ملف، وإصلاحه إلى النظام المحلي.

الخطوة 6: استخراج

الخطوة 7: إدخالالمجلد، يرجى اتباع الخطوات التالية:

ملف->إدخال->مشاريع Maven موجودة->إلى الأمام->استعراض المجلد aop-throwing-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-throwing-advice-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>aop-after-throwing-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 مجلد في باقة com.w3codebox.model الباقة.

الخطوة 10: في حزمة في باقة Account الكائن.

في فئة "حساب"، يتم تنفيذ العمليات التالية:

تم تعريف متغيرين من نوع String رقم الحساب و نوع الحساب . نقر بزر الماوس الأيمن على File -> المصدر-> إنشاء بناء استخدام الحقول إنشاء Getters.
نقر بزر الماوس الأيمن على File-> المصدر-> إنشاء Getters و Setters-> اختر Getters-> إنشاء
إنشاء toString()
نقر بزر الماوس الأيمن على الملف-> المصدر-> إنشاء toString()

Account.java

package 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() 
{
return accountType;
}
public String getAccountNumber() 
{
return accountNumber;
}
@Override
public String toString()
{
return "Account [accountNumber=" + accountNumber + ", accountType=" + accountType + "]";
}
}

الخطوة 11: أنشئ آخر اسمه مجلد com.w3codebox.service.impl

الخطوة 12: في هذا المجلد، أنشئ اسمه AccountServiceImple الكلاس.

في هذا الكلاس، نحدد خدمة الحساب.

AccountServiceImpl.Java

package com.w3codebox.service.impl;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import 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.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 الكائن.

في هذا الكائن، نحن نحقق عن طريق استخدام الطريقة التالية لتحقيق علامة ملاحظة after throwing @AfterThrowing. نحن نحدد أيضًا afterThrowingAdvice()الطريقة.

ملاحظة: يجب أن يكون الاسم الذي نحدده في سمة throwing (ex) متطابقًا مع اسم المعامل في طريقة advice. وإلا لن يعمل النصيحة.

AccountAspect.java

package com.w3codebox.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class AccountAspect 
{
//implementing after throwing advice    
@AfterThrowing(value="execution(* com.w3codebox.service.impl.AccountServiceImpl.*(..))", throwing="ex")
public void afterThrowingAdvice(JoinPoint joinPoint, Exception ex)
{
System.out.println("After throwing exception in method: " + joinPoint.getSignature());
System.out.println("Exception is: " + ex.getMessage());
}   
}

الخطوة 16: افتح AopAfterThrowingAdviceExampleApplication.java ملف وإضافة علامات ملاحظة @EnableAspectJAutoProxy.

دعم العلامات الملاحظة لمعالجة AspectJ @Aspect الكتلة الملاحظة. تستخدم مع علامة التبويب @Configuration.

نحن نستخدم الترجمة البرمجية @EnableAspectJAutoProxy. proxyTargetClass الخصائص. الخصائص proxyTargetClass = true يسمح لنا باستخدام CGLIB (مكتبة إنشاء الكود) وسيط، بدلاً من طريقة وسيط JDK القياسية القائمة على الواجهات.

ConfigurableApplicationContext هو واجهة، بجانب خوادم ApplicationContext في ApplicationContext، توفر أدوات لضبط بيئة التطبيق.

AopAfterThrowingAdviceExampleApplication.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
//@EnableAspectJAutoProxy الترجمة البرمجية تدعم معالجة المكونات المزنزنة بـ @Aspect. إنه مشابه للعلامات في التكوين XML.
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class AopAfterThrowingAdviceExampleApplication
{
    public static void main(String[] args)  
    {
        ConfigurableApplicationContext ac = SpringApplication.run(AopAfterThrowingAdviceExampleApplication.class, args);
        //الحصول على object account من سياق التطبيق
        AccountService accountService = ac.getBean("accountServiceImpl", AccountServiceImpl.class);
        Account account;
        try 
        {
        //توليد استثناء
        account = accountService.getAccountByCustomerId(null);
        if (account != null)
            System.out.println(account.getAccountNumber() + "\t" + account.getAccountType());
        } 
        catch (Exception e) 
        {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

بعد إنشاء جميع الكلاسات والمدخلات، يبدو مجلد المشروع كما يلي:

الخطوة 17: افتح AopAfterThrowingAdviceExampleApplication.java افتح ملفًا كتطبيق Java. يظهر الناتج كما يلي: