스프링 AOP 특징
- 프록시 기반의 AOP 구현체
- 스프링 빈에만 AOP를 적용할 수 있다.
- 모든 AOP 기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적.
프록시 패턴
- 기존 코드 변경 없이 접근 제어 또는 부가 기능 추가
- 성능 측정 프록시

@Primary
@Service
public class ProxySimpleEventService implements EventService {
@Autowired
SimpleEventService simpleEventService;
@Override
public void createEvent() {
long begin = System.currentTimeMillis();
simpleEventService.createEvent();
System.out.println(System.currentTimeMillis() - begin);
}
@Override
public void publicEvent() {
long begin = System.currentTimeMillis();
simpleEventService.publicEvent();
System.out.println(System.currentTimeMillis() - begin);
}
@Override
public void deleteEvent() {
simpleEventService.deleteEvent();
}
}
- 함수 실행은 위임 한다.
- Client에서 EventService를 Autowired받을때 Primary로 설정한 프록시 빈을 받게 된다. 그러므로 프록시를 통해 실행 된다.
문제점
- proxy에도 중복 코드가 생기고 중복된 proxy를 똑같이 만들어야 된다.
해결책
- 동적으로 프록시 객체를 만들수 있다. (런타임 에서 동작하는 중에)
- 스프링 IoC컨테이너가 제공하는 기반 시설과 다이나믹 프록시를 사용하여 해결 그것이 AOP이다.
- AbstractAutoProxyCreator가 빈이 등록 될때 프록시 빈도 함께 만들어 준다.