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

SpringBoot AOP @Before

قبل استخدام نصائح البرمجة من منظور الجوانب، يمكن تنفيذ العمليات المتقاطعة. هذا نوع نصيحة، يمكن أن يضمن تشغيل نصيحة قبل تنفيذ الطريقة. نستخدم @Before باستخدام التعليمات البرمجية لتحقيق before notification.

لنفهم before advice من خلال مثال.

مثال Spring Boot @Before

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

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

الخطوة 3: يقدم Artifact Id إنشاء aop-before-advice-example جديد.

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

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

الخطوة 6: استخراجملف jar المصدري.

الخطوة 7: استخدم الخطوات التالية لإدخالالمجلد:

ملف->إدخال->مشروع Maven موجود->الخطوة التالية->استعراض المجلد aop-before-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-before-advice-example</artifactId>
<version>0.0.1-SNAPSHOT</version>  
<packaging>jar</packaging>  
<name>aop-before-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: 打开 AopBeforeAdviceExampleApplication.java 文件,并添加注解 @EnableAspectJAutoProxy。

@EnableAspectJAutoProxy(proxyTargetClass=true)

它支持处理标有AspectJ的@Aspect注解的组件。它与@Configuration批注一起使用。我们可以使用 proxyTargetClass 属性来控制代理的类型。其默认值为 false

AopBeforeAdviceExampleApplication.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 AopBeforeAdviceExampleApplication 
{
    public static void main(String[] args) {
    SpringApplication.run(AopBeforeAdviceExampleApplication.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.

في كلاس الجانب، قمنا بتعريف لógica الإشعار قبل.

EmployeeServiceAspect.java

package com.w3codebox.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class EmployeeServiceAspect 
{
    @Before(value = "execution(* com.w3codebox.service.EmployeeService.*(..)) and args(empId, fname, sname)")
    public void beforeAdvice(JoinPoint joinPoint, String empId, String fname, String sname) {
        System.out.println("قبل الأسلوب:" + joinPoint.getSignature());
        System.out.println("إنشاء اسم Employee - " + fname + "، الاسم الثاني - " + sname + " و id - " + empId);
    }
}

في الكلاس التالي:

تنفيذ (التعبير): هو تعبير يمكن تطبيقه على الأساليب التي يمكن تقديم النصح بشأنها. @Before: سيقوم بتعيين العلامات الوظيفية التي يجب تنفيذها قبل الأساليب التي تغطيها PointCut.

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

لقد قمنا بضبط جميع الوحدات. الآن، سنقوم بتشغيل التطبيق.

الخطوة 18: فتح e AopBeforeAdviceExampleApplication.java ملف وسيتم تشغيله كتطبيق Java.

الخطوة 19: افتح المتصفح وأستدعي URL التالي: http: //localhost: 8080/add/employee؟empId = {id}&firstName = {fname}&secondName = {sname }

في URL السابق، /add/employee هي التي أنشأناها في صفحة التوجيهات في صفحة التوجيهات في الصنف Controller. استخدمنا علامتين تقسيم (؟)و (&)للتفريق بين القيمتين.

في الناتج السابق، قمنا بتخصيص emId 101،firstName = Tim،و secondName = الطبخ.

لنلقي نظرة على الشاشة الوسيطة. نرى أننا نستدعي EmployeeService في الصنف createEmployee قبل تنفيذ EmployeeServiceAspect طريقة في الصنف beforeAdvice()، كما هو موضح في الشكل التالي.

على نفس المنوال، يمكننا حذف الموظف من خلال طلب URL http://localhost:8080/remove/employee?empId = 101. سيتم إرجاع رسالة تم إزالته، كما هو موضح في الشكل التالي.

في هذا القسم، تعلمنا العمل الاستشاري قبل ذلك. في الجزء التالي، سنتعلم العمل الاستشاري بعد ذلك وتطبيقه في الممارسة.