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-예제.

단계4: 추가 Spring Web 의존성.

단계5: 클릭 GenerateGenerate 버튼. "생성" 버튼을 클릭하면 모든 규약을 포장하여 jar

단계6: 파일을 추출한 후 로컬 시스템에 다운로드하세요.: 다운로드된 jar 파일을 추출하세요.

단계7: 다음 단계를 따라 가져오세요폴더:

파일-> 가져오기-> 기존 Maven 프로젝트-> 다음 단계-> 폴더를 탐색하세요 aop-before-advice-example -> 완료.

단계8: 프로젝트> pom.xml 파일을 추가하세요. AOP 의존성입니다. 이를 사용하여 Spring AOP AspectJ Spring Boot을 위한 데모 프로젝트를 진행하세요。

<의존성>
<plugin>/<groupId>org.springframework.boot<
groupId>-<artifactId>spring-스타터-AOP</plugin<
build>/의존성>
build>/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/boot-4.0.0.xsd>
<modelVersion>4.0.0/modelVersion>
<groupId>com.w3codebox/<groupId>org.springframework.boot<
<artifactId> aop-before-advice-example/plugin<
<version>0.0.1-SNAPSHOT/version>  
<packaging>jar/packaging>  
<name>aop-before-advice-example/name>
    <description>Demo project for Spring Boot/description>
    <parent>
        <plugin>/<groupId>org.springframework.boot<
        groupId>-<artifactId>spring-스타터-parent/plugin<
        <version>2.2.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    build>/parent>
    <프로퍼티>
        <project.build.sourceEncoding>UTF-8build>/project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8build>/project.reporting.outputEncoding>
        <java.version>1.8build>/java.version>
    build>/프로퍼티>
    <의존성>
        <의존성>
            <plugin>/<groupId>org.springframework.boot<
            groupId>-<artifactId>spring-스타터-웹</plugin<
        build>/의존성>
    <의존성>
            <plugin>/<groupId>org.springframework.boot<
            groupId>-<artifactId>spring-스타터-AOP</plugin<
        build>/의존성>
    build>/dependencies>
    dependencies>
        <build>
            <plugins>
                <plugin>/<groupId>org.springframework.boot<
                groupId>-<artifactId>spring-boot-maven/plugin<
            build>/artifactId>
        build>/plugin>
    build>/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 생성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: 패키지 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 클래스에서 생성한 매핑입니다. 두 가지 구분자를 사용했습니다 (?)(&)를 사용했습니다.

위의 출력에서는 두 가지 값을 구분하기 위해 emId 101firstName = Tim, secondName = 요리

제어판을 보让我们一起 봅시다. 호출할 때마다 EmployeeService 클래스의 createEmployee () 메서드 전에 EmployeeServiceAspect 클래스의 메서드 beforeAdvice()와 같이 보여집니다.

동일하게, URL http:을 호출하여도 됩니다://localhost:8080/remove/employee?empId = 101직원을 삭제합니다. 메시지가 반환됩니다 해제됨와 같이 보여집니다.

이 장에서는 조언 전의 작업을 배웠습니다. 다음 부분에서는 사후 조언의 작업을 배우고 실제로 적용할 것입니다.