@Aspect

강찬우·2024년 1월 11일
  1. @Aspect?

    • "@Aspect"는 Java의 AspectJ 라이브러리에서 제공하는 주석으로, 클래스가 AOP Aspect임을 나타낸다. 이 주석을 사용함으로써 개발자는 복잡한 AOP 설정 없이도 Aspect를 쉽게 정의할 수 있다.
  2. Aspect의 역할과 중요성

    • Aspect는 특정한 관심사(로깅, 트랜잭션 관리 등)를 모듈화하고, 이를 애플리케이션의 다른 부분에 적용합니다. "@Aspect" 주석을 사용하는 클래스는 이러한 관심사를 정의하며, 이는 코드의 재사용성과 유지보수를 개선합니다.
  3. Advice와의 결합

    • "@Aspect" 주석을 사용하는 클래스는 다양한 Advice(예: @Before, @AfterReturning)와 결합된다. 이들 Advice는 메소드 실행의 특정 지점에 적용되며, "@Aspect" 주석을 사용함으로써 이러한 Advice가 어떻게 동작할지 명확히 정의된다.
  4. @Aspect의 장점

    • 코드 간결성: AOP 구현을 위한 별도의 설정이나 XML 구성 없이, 간단한 주석을 사용하여 Aspect를 정의할 수 있다.
    • 유지보수 용이성: 코드의 다른 부분과 분리된 Aspect를 통해, 관련된 관심사를 중앙에서 관리하고 수정하기 쉽다.
    • 개선된 가독성: 코드의 주요 로직과 횡단 관심사가 명확하게 분리되어, 전체적인 코드의 이해도와 가독성이 향상된다.

사용법 예시)

먼저, @Aspect 주석을 사용하여 Aspect를 정의하는 클래스를 만든다:

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class LoggingAspect {

    @Before("execution(* com.yourpackage..*.*(..))")
    public void logBeforeAllMethods() {
        System.out.println("Method is about to be called");
    }
}

여기서 LoggingAspect 클래스는 Aspect를 정의한다. @Before 주석은 특정 메소드가 호출되기 전에 실행될 로직을 지정한다. 이 경우 "execution(* com.yourpackage..*.*(..))"com.yourpackage 패키지 아래의 모든 클래스와 메소드에 대해 로깅을 적용하도록 지정한다.

이제, 이 Aspect를 사용하려면 스프링 프레임워크나 다른 AOP 프레임워크와 함께 통합해야 한다. 예를 들어, 스프링 프레임워크에서는 다음과 같이 Aspect를 활성화할 수 있다:

import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
    // 다른 빈 설정들
}

@EnableAspectJAutoProxy 주석은 스프링에게 자동으로 AOP 프록시를 생성하도록 지시한다. 이를 통해 LoggingAspect에 정의된 로직이 적절한 시점에 자동으로 실행된다.

0개의 댓글