[SIST] Spring_days03_@Aspect 애노테이션 기반 AOP 구현

2022. 7. 13. 20:58·TIL/Spring
728x90
반응형

1. @Aspect 애노테이션 기반 AOP 구현

@Aspect 애노테이션을 이용해서 AOP를 구현하는 과정은 XML 스키마 기반의 AOP 구현하는 과정과 거의 유사하며, 차이점은 아래와 같다.

 

1) @Aspect 애노테이션을 이용해서 Aspect 클래스를 구현한다.

 

2) Aspect 클래스는 Advice를 구현한 메서드와 Pointcut 표현

 

3) xml 파일 VS 자바코딩 설정에 따라 달라짐(수업때는 xml 파일 설정 사용)

> xml 파일은 <aop:aspectj-autoproxy/> 설정
> 자바 코딩 설정은 @Configuration 애노테이션과 @EnableAspectJAutoProxy 애노테이션 추가

 

- @Aspect 애노테이션을 이용할 경우 xml 설정 파일에서 Pointcut을 설정하는 것이 아니라 클래스에 Pointcut을 정의한다.

 

@Aspect 애노테이션으로 Aspect 클래스로 설정했다면 해당 클래스에는

Advice 구현 메서드와 Pointcut 정의를 모두 포함해야한다.

 

Pointcut을 설정할 수 있도록 리턴타입이 void인 메서드를 생성한 후 @Pointcut 애노테이션을 추가하여 Pointcut 설정한다.

 

@Pointcut 애노테이션이 적용된 메서드의 이름은 다음과 같이 범위에 따라 알맞게 입력을 해야한다.

- 같은 클래스에 위치한 @Pointcut 메서드는 '메서드 이름'만 입력

- 같은 패키지에 위치한 @Pointcut 메서드는 '클래스단순이름.메서드이름' 입력

- 다른 패키지에 위치한 @Pointcut 메서드는 '완전한클래스이름.메서드이름' 입력


1) xml 설정으로 @Aspect 애노테이션 기반 AOP 구현 예제)

LogPrintProfiler 클래스를 먼저 생성한 다음

applicationContext.xml 파일(xml 설정 파일)에 컴포넌트 스캔으로 빈 객체를 생성하기 위한 설정과 @Aspect 애노테이션을 이용해서 Aspect 클래스를 구현할 수 있는 설정을 해준다.

컴포넌트로 빈 객체를 생성하지 않아도 상관은 없다.(bean 태그로 직접 생성해도 된다)

[applicationContext.xml]

 

[LogPrintProfiler 클래스]

LogPrintProfiler 클래스에 @Component 애노테이션과 @Aspect 애노테이션 추가

(컴포넌트 스캔으로 빈 객체를 자동으로 생성하고 Aspect 클래스로 만들겠다는 의미)

> 클래스에 @Aspect 애노테이션을 주는 것은 xml 파일에 <aop:aspect id="traceAspect" ref="logPrintProfiler"> 코딩과 같다.

 

Advice 타입에 해당하는 메서드에 @Around, @Before, @After 애노테이션 설정

Advice 타입의 애노테이션에 Pointcut을 AspecJ 표현식으로 직접 설정할 수도 있지만,

Pointcut 애노테이션을 이용하면 해당 메서드를 value 속성으로 지정해 줄 수 있다.

 

[main() 메서드 및 결과]


2) 자바 설정으로 @Aspect 애노테이션 기반 AOP 구현 예제) - 추가 설명 필요


+ 추가

만약 Advice 구현 메서드 내에서 Advice 대상 객체가 리턴한 값을 사용하고 싶다면, 다음과 같이 returning 속성을 이용해서 리턴 값을 전달받을 파라미터의 이름을 지정해주면 된다.

 

리턴된 객체가 특정 타입인 경우에 한해서 메서드를 실행하고 싶다면 한정하고 싶은 타입의 파라미터를 사용


Spring 4.0 p230 참고

728x90
반응형

'TIL > Spring' 카테고리의 다른 글

[SIST] Srping_days04_Spring MVC  (0) 2022.07.14
[SIST] Spring_days03_Spring MVC  (0) 2022.07.13
[SIST] Spring_days02_스프링 AOP와 스프링 API / XML 스키마 기반으로 AOP 구현  (0) 2022.07.13
[SIST] Spring_days02_자바 코드를 이용한 DI 설정 / 애노테이션을 이용한 자동 의존 주입 / 컴포넌트 스캔  (0) 2022.07.12
[SIST] Spring_days01_스프링 설명/ 스프링 컨테이너 / XML을 이용한 DI 설정  (0) 2022.07.11
'TIL/Spring' 카테고리의 다른 글
  • [SIST] Srping_days04_Spring MVC
  • [SIST] Spring_days03_Spring MVC
  • [SIST] Spring_days02_스프링 AOP와 스프링 API / XML 스키마 기반으로 AOP 구현
  • [SIST] Spring_days02_자바 코드를 이용한 DI 설정 / 애노테이션을 이용한 자동 의존 주입 / 컴포넌트 스캔
야리니
야리니
오늘보다 내일 더 성장하는 개발자가 되기 위한 야리니 블로그입니다 :)
    반응형
    250x250
  • 야리니
    야리니의 step by step
    야리니
  • 링크

    • GitHub
    • Linkedin
  • 전체
    오늘
    어제
    • 분류 전체보기 (478)
      • TIL (379)
        • Java (97)
        • Kotlin (28)
        • JPA (16)
        • Spring (37)
        • Oracle (22)
        • JDBC (7)
        • Web(HTML, CSS, JS, jQuery) (90)
        • View Template (31)
        • AWS (7)
        • HTTP (7)
        • CS (5)
        • Linux, Unix (2)
        • Python (20)
      • Trouble Shooting(Error) (37)
      • Algorithm (15)
      • Git,GitHub (8)
      • Diary (24)
      • 독서 (9)
      • Etc (6)
        • Mac (1)
        • 학원준비과정 (2)
  • 블로그 메뉴

    • 방명록
    • 태그
  • 공지사항

    • 안녕하세요 :)
  • 인기 글

  • 태그

    HTML
    java
    코틀린
    java기초
    oracle
    CSS
    국비지원학원
    Kotlin
    백엔드 개발자
    쌍용교육센터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
야리니
[SIST] Spring_days03_@Aspect 애노테이션 기반 AOP 구현
상단으로

티스토리툴바