어드바이스는 프록시에 적용하는 부가기능 로직임
인터페이스가 있을땐 JDK동적프록시 없을땐 CGLIB를 사용하고싶으면 어떻게할까
JDK동적프록시의 invocationhandler나 CGLIB의 methodintercetor는 Advice를 호출한다
프록시 팩토리를 사용하면 어드바이스를 호출하는 전용 invocationhandler, methodintercetor를 내부에서 사용
프록시 팩토리가 프록시를 만들때 JDK동적프록시면 어드바이스인보케이션핸들러를만들고 CGLIB면 어드바이스메서드엔터셉터를 만든다 우리는 어드바이스만 호출하면 됨
프록시 팩토리에서 프록시를 생성할때 타겟정보를 프록시팩토리로 넘겨버리기 때문에 다른 프록시들과 달리 타지정을할필요없다
proxyFactory.setProxyTargetClass(true);를 설정하면 인터페이스가 있든없든 클래스기반으로 프록시를만든다
대상에 인터페이스 있으면 JDK동적프록시 인터페이스기반
대상에 인터페이스 없으면 CGILB프록시 구체 클래스 기반
proxyFactory.setProxyTargetClass(true); 설정시 CGLIB 구체 클래스 기반 인터페이스 여부와 상관없이
스프링부트 기본은 proxyFactory.setProxyTargetClass(true)라서 항상 CGLIB기반이다
프록시팩토리는 하나의 프록시에 여러 어드바이저도 가질수있다. 최적화를 위해서다 AOP를 많이적용해도 프록시는 하나만 만들어진다.


'Spring > AOP' 카테고리의 다른 글
| 스프링 AOP 주의점2 - 프라이빗 (0) | 2026.01.23 |
|---|---|
| 스프링 AOP 주의점1 - 내부 호출과 대안 (0) | 2026.01.23 |
| 빈 후처리기와 스프링이 프록시를 등록하는 방법 (0) | 2026.01.23 |
| Aspect (0) | 2026.01.23 |
| 스프링 AOP (0) | 2025.12.13 |