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

SpringBoot AOP @AfterReturning

After returning는 Spring AOP의 하나의 추천으로, 일반적으로 연결점이 완료되면(실행) 호출됩니다. 예외가 발생하면 호출되지 않습니다. 우리는 @AfterReturning 애플리케이션에서 추천을 반환한 후에 실행. 어노테이션은 기능을 PointCut이 덮는 메서드 전에 실행할 추천으로 표시합니다.

추천을 반환한 후, 일치하는 메서드가 정상적으로 반환 값을 실행할 때, 그 추천이 실행됩니다. 우리가 return 속성에서 정의한 이름은 advice 메서드의 매개변수 이름과 일치해야 합니다. 메서드가 반환 값을 할 때, 이 값은 해당 알림 메서드로 전달됩니다.

우리는 애플리케이션에서 알림 후에 구현합니다.

SpringBoot AOP @AfterReturning

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

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

단계3: 제공됩니다 Artifact Id.Artifact Id를 제공합니다 aop-after-returning-advice-예제.

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

단계5: 클릭 생성버튼. "생성" 버튼을 클릭하면 모든 규약을 포장합니다. jar 파일에서 내용을 추출하여 로컬 시스템에 다운로드합니다。

단계6: 추출

第7단계: 다음 단계를 사용하여 가져오기폴더:

파일-> 가져오기-> 현재 Maven 프로젝트-> 다음 단계-> 폴더를 보기 aop-returning-advice-example 예제-> 완료.

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

<의존성>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-스타터-aop</artifactId>
</<dependency>
</<dependencies>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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-returning-advice-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>aop-after-returning-advice-example</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-스타터-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<속성>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</속성>
<의존성>
<의존성>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-스타터-aop</artifactId>
</<dependency>
<의존성>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-스타터-test</artifactId>
<scope>test</scope>
</<dependency>
</<dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

단계9: 에서 생성하십시오. src/main/java 폴더 에 이름을 com.w3codebox.model 의 패키지를 생성했습니다.

단계10: 의 패키지 com.w3codebox.model에 이름을 Account 의 클래스를 사용하여

"Account" 클래스에서 다음 작업을 수행하세요:

String 타입의 두 개의 변수를 정의했습니다 accountNumber accountType 파일을 오른쪽 클릭-> 소스-> 필드를 사용하여 생성자 생성 Getters 생성.
파일을 오른쪽 클릭-> 소스-> Generate Getters and Setters-> Getters 선택-> Generate
생성 toString()
파일을 오른쪽 클릭-> 소스-> toString() 생성...

Account.java

package com.w3codebox.model;
public class Account 
{
    private String accountNumber;
    private String accountType;
    public Account(String accountNumber, String accountType) 
    {
        super();
        this.accountNumber = accountNumber;
        this.accountType = accountType;
    }
    public String getAccountType() 
    {
        return accountType;
    }
    public String getAccountNumber() 
    {
        return accountNumber;
    }
    @Override
    public String toString()
    {
        return "Account [accountNumber=" + accountNumber+ ", accountType=" + accountType + "]";
    }
}

단계11: 또 다른 이름을 가진 com.w3codebox.service.impl의 패키지.

단계12: 이 프로그램 패키지에서 이름이 AccountServiceImple의 클래스.

이 클래스에서 계정 서비스를 정의했습니다.

AccountServiceImpl.Java

package com.w3codebox.service.impl;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.springframework.stereotype.Service;
import com.w3codebox.model.Account;
@Service
public class AccountServiceImpl implements AccountService 
{
    //HashMap에 계정 세부 정보를 저장합니다
    private static Map<String,Account> map = null;
    static
    {
        map = new HashMap<>();
        //map에 계정 상세 정보를 추가합니다
        map.put("M4546779", new Account("10441117000", "Saving Account"));
        map.put("K2434567", new Account("10863554577", "Current Account"));
    }
    @Override
    public Account getAccountByCustomerId(String customerId) throws Exception
    {
    if(customerId ==null)
    {
        throw new Exception("Invalid! Customer Id");
    }
    Account account= null;
    Set<Entry<String, Account>> entrySet = map.entrySet();
    for (Entry<String, Account> entry : entrySet) 
    {
        if(entry.getKey().equals(customerId))
        {
            account= entry.getValue();
        }
    }
    return account;
    }
}

단계13: 에서 생성하십시오. com.w3codebox.service.impl.패키지에서 이름이 AccountService 의 인터페이스.

AccountService.java

package com.w3codebox.service.impl;
import com.w3codebox.model.Account;
//고객 id를 찾지 못하면 예외를 발생시키는 인터페이스를 생성 중입니다
public interface AccountService 
{
    public abstract Account getAccountByCustomerId(String customerId) throws Exception;
}

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

단계15: 의 패키지 com.w3codebox.aspect 에서 이름이 AccountAspect 의 클래스를 사용하여

이 클래스에서는 @AfterReturning를 정의했습니다. 우리는 또한 afterReturningAdvice()메서드.

주의: 우리는 에서 정의된 name(account) > returning 속성은 advice 메서드의 매개변수 이름과 일치해야 합니다.

AccountAspect.java

package com.w3codebox.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import com.w3codebox.model.Account;
@Aspect
@Component
public class AccountAspect 
{
//implementing after returning advice   
@AfterReturning(value="execution("* com.w3codebox.service.impl.AccountServiceImpl.*(..))", returning="account")
public void afterReturningAdvice(JoinPoint joinPoint, Account account)
{
System.out.println("After Returning method:");+joinPoint.getSignature());
System.out.println(account);
}
}

단계16: 열기 AopAfterReturningAdviceExampleApplication.java 파일에 어소시아트를 추가 @EnableAspectJAutoProxy.

어소시아트 지원 처리를 위한 @Aspect 어노테이션의 구성 요소. 그것은 @Configuration 어노테이션과 함께 사용됩니다.

우리는 @EnableAspectJAutoProxy 어노테이션을 사용했습니다. proxyTargetClass 속성. 속성 proxyTargetClass = true 사용할 수 있게 합니다 CGLIB (코드 생성 라이브러리) 대리자는 기본적인 인터페이스 기반 JDK 대리자 메서드 대신 대리자를 사용합니다.

ConfigurableApplicationContext 은 인터페이스입니다. ApplicationContext에서의 클라이언트 메서드 외에도应用程序 컨텍스트를 구성하는 도구를 제공합니다.

AopAfterReturningAdviceExampleApplication.java

package com.w3codebox;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import com.w3codebox.model.Account;
import com.w3codebox.service.impl.AccountService;
import com.w3codebox.service.impl.AccountServiceImpl;
@SpringBootApplication
//@EnableSpectProxy 어노테이션은 @Aspect 어노테이션으로 표시된 구성 요소를 처리하는 지원을 제공합니다. 그것은 xml 구성에서의 태그와 유사합니다.
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class AopAfterReturningAdviceExampleApplication
{
    public static void main(String[] args)  
    {
    ConfigurableApplicationContext ac = SpringApplication.run(AopAfterReturningAdviceExampleApplication.class, args);
    //application 컨텍스트에서 account 객체를 가져옵니다.
    AccountService accountService = ac.getBean("accountServiceImpl", AccountServiceImpl.class);
    Account account;
    try 
    {
        account = accountService.getAccountByCustomerId("K2434567);
        if(account != null)
            System.out.println(account.getAccountNumber())+"\t"+account.getAccountType());
        } 
        catch(Exception e) 
        {
            System.out.println(e.getMessage());
        }
    }
}

모든 클래스와 패키지를 생성한 후 프로젝트 디렉토리는 다음과 같습니다:

단계17: 열기 AopAfterReturningAdviceExampleApplication.java 파일을 열고 Java 애플리케이션으로 실행합니다. 다음과 같이 출력이 표시됩니다:

다음 장에서는 제안을 제시한 후 이해할 것입니다.