English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Bevor man Ratschläge im aspektbezogenen Programmieren anwendet, kann man Queroperationen implementieren. Dies ist ein Ratschlagstyp, der sicherstellt, dass Ratschläge vor der Ausführung eines Methodenlaufs ausgeführt werden. Wir verwenden @Before Anmerkungen, um before-Benachrichtigungen zu realisieren.
Lassen Sie uns durch ein Beispiel verstehen, wie man before-Ratschläge anwendet.
Schritt1: Öffnen Sie Spring Initializr http://start.spring.io .
Schritt2: bieten Gruppe Name. Wir bieten den Gruppennamen com.w3codebox.
Schritt3: bieten Artifact Id Erstellen Sie eine neue aop-vor-beratung-Beispiel.
Schritt4: hinzufügen Spring Web Abhängigkeit.
Schritt5: Klicken GenerateSchaltfläche. Wenn wir auf die Schaltfläche "Generieren" klicken, werden alle Regeln in jar Datei und laden Sie sie auf das lokale System herunter.
Schritt6: ExtrahierenHeruntergeladene jar-Datei.
Schritt7: Verwenden Sie die folgenden Schritte, um zu importierenOrdner:
Datei->Importieren->Bestehendes Maven-Projekt->Nächste->Browsen Sie den Ordner aop-vor-beratung-example ->abgeschlossen.
Schritt8: 打开 pom.xml Datei und fügen Sie die folgenden AOP Abhängigkeiten. Es wird Spring AOP und AspectJ Einführung in die aspektorientierte Programmierung.
<Abhängigkeit> <groupId>org.springframework.boot</<groupId> <artifactId>spring-boot-Starter-AOP</artifactId> </Abhängigkeit> </<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-vor-beratung-example</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>aop-vor-beratung-example</name> <description>Demo-Projekt für Spring Boot</description> <parent> <groupId>org.springframework.boot</<groupId> <artifactId>spring-boot-Starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath /> <!-- suche parent von repository --> </parent> <Eigenschaften> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </Eigenschaften> <Abhängigkeiten> <Abhängigkeit> <groupId>org.springframework.boot</<groupId> <artifactId>spring-boot-Starter-Web</artifactId> </Abhängigkeit> <Abhängigkeit> <groupId>org.springframework.boot</<groupId> <artifactId>spring-boot-Starter-AOP</artifactId> </Abhängigkeit> </<dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</<groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Schritt9: 打开 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); } }
Schritt10: eine Namensgebung com.w3codebox.model包。
Schritt11: im Paket com.w3在codebox.model下创建一个类。 We create a named Employee的类。 在类中,定义以下内容:
定义三个String类型的变量 empId,firstName,und secondName 。 生成Getters and Setters。 创建default
Employee.java
package com.w3codebox.model; public class Employee { private String empId; private String firstName; private String secondName; //Standardkonstruktor 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; } }
Schritt12: Erstellen Sie eine Namens com.w3Das Paket codebox.controller.
Schritt13: im Paket com.w3Erstellen Sie eine Kontrollklasse unter codebox.controller. We create a named Die Klasse EmployeeController.
In der Kontrollklasse definieren wir zwei Abbildungen, eine zum Hinzufügen von Mitarbeitern und eine zum Löschen von Mitarbeitern.
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"; } }
Schritt14: eine Namensgebung com.w3The codebox.service package.
Schritt15: im Paket com.w3Create a Service class under codebox.service. We create a named The EmployeeService class.
In the Service class, we define two methods createEmployee und 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) { } }
Schritt16: eine Namensgebung com.w3im Paket codebox.aspect.
Schritt17: im Paket com.w3eine Aspektklasse unter codebox.aspect erstellt. Wir haben eine Namensgebung Die Klasse EmployeeServiceAspect.
In der Aspektklasse haben wir die before-Benachrichtigungslogik definiert.
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.*((..)) und args(empId, fname, sname)") public void beforeAdvice(JoinPoint joinPoint, String empId, String fname, String sname) { System.out.println("Before-Methode:" + joinPoint.getSignature()); System.out.println("Erstellen eines Namens für Employee als Employee - " + fname + ", zweiter Name - " + sname + " und id - " + empId); } }
In der obigen Klasse:
Ausführen (Ausdruck): Ein Ausdruck ist ein Verfahren, auf das ein Rat angewendet werden kann. @Before: Es markiert die Funktionen als Ratschläge, die vor den Methoden, die durch PointCut abgedeckt werden, ausgeführt werden sollen.
Nachdem alle Module erstellt wurden, sieht der Projektverzeichnis wie folgt aus:
Wir haben alle Module eingerichtet. Jetzt werden wir die Anwendung ausführen.
Der18Schritt: Öffnen Sie AopBeforeAdviceExampleApplication.java Datei und führen Sie sie als Java-Anwendung aus.
Schritt19: Öffnen Sie den Browser und rufen Sie die folgende URL auf: http: //localhost: 8080/add/employee?empId = {id}&firstName = {fname}&secondName = {sname }
Im obigen URL /add/employee ist die Abbildung, die wir im Controller-Klasse erstellt haben. Wir haben zwei Trennzeichen verwendet (?)und (&)verwendet, um die beiden Werte zu trennen.
Im obigen Ausgabe haben wir emId 101,firstName = Tim,und secondName = kochen.
Lassen Sie uns den Console-Output betrachten. Wir sehen, dass bei der Aufrufung EmployeeService der Klasse createEmployee vor der Methode EmployeeServiceAspect Methode der Klasse beforeAdvice(), wie im folgenden gezeigt.
Gleichzeitig können wir auch durch Aufruf der URL http://localhost:8080/remove/employee?empId = 101Mitarbeiter löschen. Es wird eine Nachricht zurückgegeben Abberufen, wie im folgenden Bild gezeigt.
In diesem Abschnitt haben wir gelernt, wie man vor der Beratung arbeitet. Im nächsten Abschnitt werden wir lernen, wie man nachträglich Empfehlungen gibt und diese in die Praxis umsetzt.