스프링에서의 스프링 빈은 프록시 객체가 된다.

@Service
public class MyService {
    public void hello() {
        System.out.println("Hello!");
    }
}

여기에 AOP가 적용되어 있다고 가정하면:

  1. 원래 MyService 객체가 먼저 생성됨
  2. 그 객체를 감싸는 프록시 객체가 생성됨
  3. 스프링은 이 프록시 객체를 빈으로 등록
MyService (우리가 만든 클래스)
   ↓ 감쌈
프록시 (AOP 기능 추가된 대리 객체)
   ↓ 등록됨
스프링 빈 (→ 이건 프록시 객체!)

스프링 컨테이너 안에 실제로 있는 객체(스프링 빈)는 = 프록시 객체

이 프록시가 내부에서 ⇒ 원래 MyService 객체를 호출하는 구조

이러한 방식을 통해서?

스프링은 기존 코드를 전혀 수정하지 않고도

트랜잭션, 로깅, 보안 같은 기능을 자동으로 끼워넣을 수 있다.


AOP 예시 살펴보기 (with 클래스 리플렉션)

메소드 실행 시간을 log로 남기는 AOP 예시