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

SpringBoot AOP @Before

アスペクト指向のプログラミングでアドバイスを使用する前に、クロス操作を実現できます。これは、メソッドの実行前にアドバイスを実行することを保証するアドバイスタイプです。以下を使用して @Before アノテーションでbefore通知を実現します。

例を通じてbeforeアドバイスを理解しましょう。

Spring Boot @Before例

ステップ1: Spring Initializrを開きます http://start.spring.io。

ステップ2: 提供 Group 名前。以下のグループ名を提供しています com.w3codebox。

ステップ3: 提供 Artifact Id 新しいaopを作成します。-before-advice-example。

ステップ4: 追加 Spring Web 依存関係。

ステップ5: クリック GenerateGenerate ボタン。"生成"ボタンをクリックすると、すべての規範を jar

ステップ6: ファイルを展開し、ローカルシステムにダウンロードします。: ダウンロードしたjarファイルをダウンロードします。

ステップ7: 以下の手順でインポートします。フォルダー:

ファイル->インポート->既存のMavenプロジェクト->次へ->フォルダーをブラウズ aop-before-advice-example ->完了。

ステップ8: プロジェクト pom.xml ファイルを追加します。 AOP 依存関係です。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>
</>

ステップ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 生成ゲッターとセッター。 作成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のクラス。

コントローラークラス内で、従業員を追加するためと従業員を削除するための2つのマッピングを定義しました。

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: のパッケージ com.w3codebox.service下創建一個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のクラス。

アスペクトクラスの中で、before通知のロジックを定義しました。

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("Beforeメソッド:" + joinPoint.getSignature());
        System.out.println("Employeeの名前を生成しています Employee" - " + fname + ", second name - " + sname + " and 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クラスで作成したマッピングです。2つの区切り文字を使用しました。 (?)そして、 (&)を使用して2つの値を区切っています。

上の出力では、 emId 101、firstName = Tim、そして、 secondName =料理。

コンソールを確認してみましょう。呼び出したときに、 EmployeeService クラスの createEmployee メソッドの前に、 EmployeeServiceAspect クラスのメソッド beforeAdvice()以下のように。

同様に、URL http:を呼び出すことで、//localhost:8080/remove/employee?empId = 101従業員を削除します。メッセージが返されます 解任、以下の図のように。

このセクションでは、事前に相談した作業について学びました。次のセクションでは、事後の提案の作業を学び、実際に応用します。