주니 개발 도서관

Spring

[ 관점지향 프로그래밍 ] AOP ( Pointcut 어노테이션 설정 )

주니홍 2022. 9. 16. 16:30

 

 

applicationContext.xml 에서 스프링 컨테이너에게
"나 지금부터 AOP 설정 @으로 할거야" 라고 알려줘야한다

 

xml 설정들을 @으로 바꿔보도록 하겠다

 

위 사진의 코드를 모두 어노테이션으로 바꿔보도록 하겠다

 

 

 


 

 

1)  @Service @Aspect

 

서비스 어노테이션은 DAO를 Service하는 클래스에 설정하는 어노테이션인데

일반적인 @Context 어노테이션보다 메모리를 덜 사용하고 더 빠르게 찾을 수 있는 장점이있음

 

+ @Aspect를 이용하여 DAO Service 클래스와 혼동이 오지않도록

해당 어노테이션이 있다면 Advice 클래스라는 의미

 

 

2) @Pointcut ( 포인트컷(핵심로직, CRUD) 범위 설정 )

 

public void 포인트컷명() {} 위에 설정하고

바디를 채울필요가 없기때문에 {}로 바로 닫아준다

 

[ 추가 수정 ** ]

Pointcut은 갯수가 점점 많아질것이고 다른 곳에서도 자주쓰기 때문에 모듈화 해놓는다

클래스를 생성하여 Pointcut을 모두 정리해놓는다

 

@Aspect를 쓴 이유

 

Advice 클래스에는 Pointcut이 사용될 것이기 때문에

Advice와 Potincut을 연동하기위해 사용하는 @ 어노테이션 이였던 것!

 

그렇기 때문에 public void aPointcut() {} 을 Advice 클래스내부에 선언할 필요가 없어졌다!!

 

 

 

3) @Around (" 사용할 포인트컷 메소드 ")

 

포인트컷과 반응할 공통로직(횡단관심)메서드위에 작성

 

@After , @Before ... 등등 여러 사용타이밍에 맞춰 작성하고

( ) 안에 사용할 포인트컷 메소드를 넣는다

 

[ 추가 수정** ]

@Before ( ? )

@AfterReturn ( ? )

@AfterThrowing ( ? )

 

? 마다 넣어야할 인자가 다르다

 

특별하게 볼 부분은 AfterReturning 과 AfterThrowing 부분이고

 

다른 Before, Around, After는 원하는 Pointcut 위치만 넣어주면 된다

>> PointcutCommon 클래스는 Pointcut을 보관하는 클래스