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

SpringBoot AOP @After

SpringBoot AOP의 After Advice는 방향을 구현하는 데 사용됩니다. 이는 메서드 실행 후에 제안이 실행되도록 보장하는 제안 유형입니다. 우리는 @After 댓글로 후속 제안을 구현합니다.

우리는 예제를 통해 후속 제안을 이해해 보겠습니다.

SpringBoot @Around 예제

단계1: Spring Initializr 열기 http://start.spring.io.

단계2: 제공 Group 이름. 우리는 그룹 이름을 제공합니다 com.w3codebox.

단계3: 제공됩니다 Artifact Id.Artifact Id 제공 aop-after-advice-example.

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

단계5: 클릭 생성버튼. "생성" 버튼을 클릭하면 모든 규약이 포장됩니다. jar 로 로컬 시스템에 다운로드하세요

단계6: 파일을 추출하세요다운로드한 jar 파일을.

단계7: 다음 단계를 통해 폴더를导入하세요폴더:

파일-импортировать-기존 Maven 프로젝트-다음 단계로 이동하세요-폴더를 탐색하세요 aop-after-advice-example -완료.

단계8: 열开封 pom.xml 파일을 추가하여 다음과 같이 설정합니다. AOP 의존성입니다. AOP를 사용하여 Spring AOP 그리고 AspectJ Spring Boot을 위한 데모 프로젝트입니다.

<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-after-advice-example</artifactId>
<version>0.0.1-SNAPSHOT</version>  
<packaging>jar</packaging>  
<name>aop-after-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: 열开封 AopAfterAdviceExampleApplication.java 파일을 열고 다음과 같은 애노테이션을 추가합니다 @EnableAspectJAutoProxy.

@EnableAspectJAutoProxy(proxyTargetClass=true)

AspectJ를 지원합니다. @Aspect 댐프트(Annotation) 컴포넌트. @Configuration 댐프트와 함께 사용됩니다. 다음과 같이 사용할 수 있습니다: proxyTargetClass 프로ksi의 유형을 제어하는 속성. 기본 값은 false .

AopAfterAdviceExampleApplication.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 AopAfterAdviceExampleApplication 
{
    public static void main(String[] args) {
        SpringApplication.run(AopAfterAdviceExampleApplication.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/, 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/, method = RequestMethod.GET)
    public String removeEmployee(@RequestParam("empId") String empId) 
    {
        employeeService.deleteEmployee(empId);
        return "Employee removed";
    }
}

단계14: 이름이 com.w3codebox.service 패키지.

단계15: 데이터베이스 com.w3codebox.service 하에 서비스 클래스를 생성했습니다. 이름이 EmployeeService 클래스.

서비스 클래스에서 두 메서드를 정의했습니다. 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 클래스.

아래에서는, 아키텍처 클래스에서 후 조언 로직을 정의했습니다.

EmployeeServiceAspect.java

package com.w3codebox.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.After;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class EmployeeServiceAspect 
{
    @After(value = "execution("* com.w3codebox.service.EmployeeService.*(..)) and args(empId, fname, sname)")
    public void afterAdvice(JoinPoint joinPoint, String empId, String fname, String sname) {
        System.out.println("After method:") + joinPoint.getSignature());
        System.out.println("Creating Employee with first name - " + fname + ", second name - " + sname + " and id - " + empId);
    }
}

위 클래스에서:

execution(expression): 추가 조언을 적용할 수 있는 방법입니다. @After: 사용하여 @After 참조 점 표현식과 일치하는 모든 메서드 이후에 실행되는 메서드는 주석 처리됩니다.

모듈을 모두 생성한 후, 프로젝트 디렉토리는 다음과 같습니다:

모든 모듈을 설정했습니다. 지금 이 애플리케이션을 실행하겠습니다.

제18걸음: 열开封 AopAfterAdviceExampleApplication.java 파일을 Java 애플리케이션으로 실행하려면 파일을 엽니다.

단계19: 브라우저를 열고 다음 URL을 호출하세요: http://localhost:8080/add/employee?empId = {id}&firstName = {fname}&secondName = {sname}

위의 URL에서 /add/employee Controller 클래스에서 생성한 매핑입니다. 두 가지 구분자를 사용했습니다 (?)그리고 (&)을 사용했습니다.

위의 출력에서는 두 가지 값을 구분하기 위해 emId 102firstName = Sachin,그리고 secondName = Bansal.

제어판을 보면, 호출한 후에 EmployeeService 클래스의 createEmployee () 메서드 이후로 EmployeeServiceAspect 클래스의 메서드 afterAdvice()그림과 같이 보여집니다.

또한, URL http:을 호출하여도 됩니다: //localhost: 8080/remove/employee?empId = 102직원을 제거하기 위해 이동하세요. 메시지를 반환합니다 퇴직한 직원그림과 같이 보여집니다.

이 장에서는 After Advice의 작동 원리를 배웠습니다. 다음 장에서는 주의를 받는 주변을 배우겠습니다.