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을 보관하는 클래스
'Spring' 카테고리의 다른 글
[ MVC 패턴 ] Spring으로 표현하기 (0) | 2022.09.20 |
---|---|
[ JDBC ] 템플릿 메서드 패턴 (0) | 2022.09.16 |
[ 관점지향 프로그래밍 ] AOP ( xml설정 - JointPoint ) (0) | 2022.09.16 |
[ 관전지향 프로그래밍 ] AOP (xml설정 ) (0) | 2022.09.15 |
[ 제어의 역행 ] 어노테이션을 이용한 Model 관리 (0) | 2022.09.14 |