학습 기록/스프링 복습

AOP복습

서버관리자 페페 2024. 5. 7. 14:30

1.

spring-context 기본 모듈에 AOP 기능은 있으나,

어노테이션 추가기능 사용 위해 aspectjweaver 디펜던시 추가

 

2.

delegate 패턴

- interface Calculator

- class implements Calculater : field + 세터 + @Override(앞뒤로 추가기능)

 

-

 

3.

프록시 : 실행은 다른 객체에 위임하고 부가 기능을 제공하는 객체

 

4.

대상 객체 : 실제 핵심 기능을 실행하는 객체

 

* 프록시보다 데코레이터

 

-

 

5.

AOP (관점보다는 기능으로 해석)

핵심 기능을 구현한 코드의 수정 없이 공통 기능을 적용하는 것

 

6.

3가지 시점

AspectJ : 컴파일 시점

AspectJ : 클래스 로딩 시점 : 바이트코드에 삽입

스프링 제공 : 런타임에 프록시 객체 생성 

 

7.

스프링 AOP는 프록시 객체를 자동으로 만들어주며, 직접 구현할 필요 없다.

 

 

8.

주로 Around Advice 사용

(실무에서 캐시, 성능 모니터링 역시 around사용)

 

-

 

9.

사용할 3개 페이지 = "설정 + 사용할 Aspect 클래스 + 메인에서 사용"

 

@Configuration

@EnableAspectJAutoProxy

public Appctx class { @Bean - Aspect구현 클래스}

 

@Aspect -> @PointCut(targetclass) -> @Around("publicTarget")

 

메인 : ctx 만들기 -> getBean(일반 cal 객체만 만든다) -> 사용 -> ctx.close

 

-

 

10.

어라운드 내부에서

try -> jointPoint.proceed(); (실제 대상객체 호출)

앞에 시간측정 준비 +finally에 시간측정 

 

 

11.

@Enable : 복잡한 스프링 설정을 대신 함

(인에이블 웹 MVC)

 

-

 

12. 프록시 생성 방식

컨테이너에서 cal 빈 받아올때 인터페이스 원본 Calculator 로 받아와야 프록시가 만들어진다. 프록시 역시 원본 인터페이스를 상속하기 때문

@EnableAspectJAutoProxy(proxyTargetClass=true) -> 실제 클래스 이용해서 빈 객체 구현

 

-

 

13.

캐시 기능 추가하여 여러 프록시의 작동순서

@Aspect

@Order(1)

 

-

 

14. 포인트컷 다른 사용

@Around에 excution 명시자 직접 사용

 

-

 

15. 공통 Pointcut 사용

캐시에서 @PointCut 경로 설정 삭제

캐시에서

@Around("aspect.ExeTimeAspect.publicTarget()")

public Object execute(ProceedingJointPoint jointPoint) throws Throwable {}

 

16.

CommonPointCut 클래스 별도 작성

@Pointcut("execution)(public-경로)")

public void commonTarget() {}

'학습 기록 > 스프링 복습' 카테고리의 다른 글

DispatcherServelet  (0) 2024.05.20
JDBC Template / 트랜잭션  (0) 2024.05.07
빈 라이프사이클  (0) 2024.05.07
스프링 DI 복습  (0) 2024.05.07