[Spring] AOP와 어노테이션

2024. 10. 16. 14:42·Spring

AOP란?

AOP란 Aspect-Oriented Programming의 약자로, 횡단 관심사를 모듈화하여 코드의 가독성을 높이고, 유지보수를 용이하게 하는 프로그래밍 기법이다. 주로 로깅, 보안, 트랜잭션 관리와 같은 기능에 사용된다.

 

AOP와 어노테이션

@Aspect

@Aspect 어노테이션은 AOP의 핵심 요소인 Aspect를 정의한다. Aspect는 공통 관심사를 포함하는 모듈로, 메서드 실행 전후에 특정 동작을 정의할 수 있다.

@Aspect
public class MyAspect {
    // Advice 메서드 정의
}

@Pointcut

@Pointcut 어노테이션은 특정 Join Point를 정의한다.

Join Point는 Advice가 적용될 수 있는 지점을 의미하며, 포인트컷 표현식을 통해 정의할 수 있다.

@Pointcut("execution(* com.yn.app.biz..*Impl.*(..))")
	public void logPointcut() {} // 참조 메서드

@Before

@Before 어노테이션은 지정한 포인트컷 이전에 실행될 Advice를 정의한다.

이 어노테이션을 사용하여 메서드 호출 전에 특정 동작을 수행할 수 있다.

@Before("PointcutCommon.serviceMethods() && !PointcutCommon.selectAllMethods()")
    public void DBaccess() {
        System.out.println("DB 접근 발생!");
    }

 

@After

@After 어노테이션은 지정한 포인트컷 이후에 실행될 Advice를 정의한다.

메서드 실행 후에 동작을 수행해야 할 때 사용한다.

@After("PointcutCommon.cudMethods()")
    public void DBupdate() {
        System.out.println("DB 변경 완료!");
    }

 

@Around

@Around 어노테이션은 메서드 실행 전후에 동작을 정의할 수 있는 Advice이다. 이 어노테이션을 사용하면 메서드를 직접 호출하고, 그 결과를 조작할 수 있다.

@Around("serviceLayer()")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
    System.out.println("메서드 실행 전");
    Object result = joinPoint.proceed(); // 실제 메서드 호출
    System.out.println("메서드 실행 후");
    return result;
}

 

@AfterReturning

@Around 어노테이션은 메서드 실행 전후에 동작을 정의할 수 있는 Advice이다. 이 어노테이션을 사용하면 메서드를 직접 호출하고, 그 결과를 조작할 수 있다.

@AfterReturning(pointcut = "PointcutCommon.selectReturnDTO()", returning = "returnObj")
    public void logDTO(JoinPoint jp, Object returnObj) {
    	System.out.println("서비스 기능 반환 발생!");
        System.out.println("메서드명: " + jp.getSignature().getName());
        if (returnObj != null) {
            System.out.println("반환된 DTO: " + returnObj.toString());
        } else {
            System.out.println("반환된 DTO가 없습니다.");
        }
    }

 

@AfterThrowing

@AfterThrowing 어노테이션은 메서드 실행 중 예외가 발생했을 때 호출되는 Advice이다. 예외 처리 로직을 작성할 때 유용하다.

@AfterThrowing(pointcut = "serviceLayer()", throwing = "error")
public void afterThrowingAdvice(JoinPoint joinPoint, Throwable error) {
    System.out.println("메서드 실행 중 오류 발생: " + error.getMessage());
}

 

'Spring' 카테고리의 다른 글

[Spring] Multipart & 파일 업로드  (1) 2024.10.23
[Spring] 커스텀 어노테이션  (1) 2024.10.23
[Spring] AOP 관점지향 프로그래밍  (1) 2024.10.15
[Spring] Ajax를 이용한 비동기 처리와 아이디 중복검사 구현  (0) 2024.10.14
[Spring] Tomcat Server 기동 시 Listener와 Spring IoC Container의 초기화 과정  (0) 2024.10.10
'Spring' 카테고리의 다른 글
  • [Spring] Multipart & 파일 업로드
  • [Spring] 커스텀 어노테이션
  • [Spring] AOP 관점지향 프로그래밍
  • [Spring] Ajax를 이용한 비동기 처리와 아이디 중복검사 구현
yn98
yn98
좌우명 : 여전할 것 인가, 역전할 것 인가? 백엔드 개발자가 되고싶은 역전하고 있는 개발자 꿈나무의 블로그입니다. 개발을 하면서 공부한 것들을 기록합니다. 24.06 ~
  • yn98
    개발 꿈나무
    yn98
  • 전체
    오늘
    어제
    • 분류 전체보기 (131)
      • Python (3)
      • 공부 (7)
      • DB (7)
      • JAVA (24)
      • JSP (9)
      • jQuery (2)
      • HTML (3)
      • Spring (20)
      • 웹 (4)
      • C (1)
      • Git (2)
      • 에러일기 (19)
      • 프로젝트 (6)
      • 책 (21)
        • 멘토씨리즈 자바 (14)
        • 2024 수제비 정보처리기사 (7)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
    • Notion
  • 공지사항

  • 인기 글

  • 태그

    상속
    html
    java
    어노테이션
    정처기 실기
    @service
    수제비
    오블완
    정보처리기사
    정처기
    MVC
    jsp
    정보처리기사 실기
    2-layered 아키텍처
    ViewResolver
    이벤트 스케줄러
    DispatcherServlet
    recoverabledataaccessexception
    codeup 4891 : 행복
    @Component
    티스토리챌린지
    객체지향
    멘토씨리즈 자바
    Di
    Spring
    스프링 프레임워크
    aop
    생성자
    @repository
    오버로딩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
yn98
[Spring] AOP와 어노테이션
상단으로

티스토리툴바