[스프링 핵심 원리 - 고급편] #16. 스프링 AOP - 실무 주의사항(2) #74
YONGHYNG
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
프록시 기술과 한계 - 타입 캐스팅
프록시를 만들 수 있다.
JDK 동적 프록시 한계
ProxyCastingTest
jdkProxy()
JDK 동적 프록시 캐스팅
ProxyCastingTest - 추가
CGLIB 프록시

cglibProxy() 테스트
정리
프록시 기술과 한계 - 의존관계 주입
ProxyDIAspect
코드 설명
@SpringBootTest: 내부에 컴포넌트 스캔을 포함하고 있다. MemberServiceImpl 에@Component가 붙어있으므로 스프링 빈 등록 대상이 된다.
@Import(ProxyDIAspect.class): 앞서 만든 Aspect를 스프링 빈으로 등록한다.JDK 동적 프록시를 구체 클래스 타입에 주입
실행
실행 결과

hello.aop.member.MemberServiceImpl 이지만 실제 넘어온 타입은 com.sun.proxy.$Proxy54 이다. 따
라서 타입 예외가 발생한다고 한다.
@Autowired MemberService memberService: 이 부분은 문제가 없다. JDK Proxy는MemberService 인터페이스를 기반으로 만들어진다. 따라서 해당 타입으로 캐스팅 할 수 있다.
@Autowired MemberServiceImpl memberServiceImpl: 문제는 여기다. JDK Proxy는MemberService 인터페이스를 기반으로 만들어진다. 따라서 MemberServiceImpl 타입이 뭔지 전혀 모른
다. 그래서 해당 타입에 주입할 수 없다.
CGLIB 프록시를 구체 클래스 타입에 주입
@Autowired MemberService memberService: CGLIB Proxy는 MemberServiceImpl 구체 클래스를 기반으로 만들어진다. MemberServiceImpl 은 MemberService 인터페이스를 구현했기 때문에 해당 타
입으로 캐스팅 할 수 있다.
@Autowired MemberServiceImpl memberServiceImpl: CGLIB Proxy는 MemberServiceImpl 구체 클래스를 기반으로 만들어진다. 따라서 해당 타입으로 캐스팅 할 수 있다.정리
프록시 기술과 한계 - CGLIB
CGLIB 구체 클래스 기반 프록시 문제점
대상 클래스에 기본 생성자 필수
생성자 2번 호출 문제
final 키워드 클래스, 메서드 사용 불가
정리
프록시 기술과 한계 - 스프링의 해결책
스프링의 기술 선택 변화
이렇게 해서 구체 클래스 타입으로 의존관계를 주입하는 문제를 해결했다. 스프링 부트는 별도의 설정이 없다면 AOP를 적용할 때 기본적으로 proxyTargetClass=true 로 설정해서 사용한다.
정리
실행 결과

Beta Was this translation helpful? Give feedback.
All reactions