-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: proxy factory bean 을 사용하고 util화 한다. #23
Conversation
JDK Dynamic Proxy -> SpringFactoryBean 을 이용한 CGLIB
JDK Dynamic Proxy -> SpringFactoryBean 을 이용한 CGLIB
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다~ ProxyFactoryBeanUtils
에 대한 테스트만 만들어주시면 저는 merge해도 될 것 같다고 생각이 드네용
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다!
테스트도 꼼꼼하게 짜주셨네요
사용하지 않는 import만 제거해주시면 될거같아요 :)
@@ -0,0 +1,19 @@ | |||
package com.morak.performancetracker.aop.util; | |||
|
|||
import java.lang.reflect.Proxy; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사용하지 않는 Import네요!
closed #13, #14
배경 지식
AOP 를 이용하기 위해 proxy 객체를 생성하는 방식에는 두 가지가 있다.
리플렉션을 이용하여 프록시 객체를 만들고 인터페이스 구현으로 프록시 객체가 동작하게 한다.
이용하기 쉽지만 단점이 많이 존재한다.
바이트 코드 조작을 통해 프록시 객체를 만들고 상속, 조합 방식으로 프록시 객체가 동작하게 한다.
상세 내용
리플렉션과 spring aop 로 분산되어 있던 프록시 생성 로직을 ProxyFactoryBean 으로 통일시켰다.
target 클래스에 대해 프록시 객체를 생성한다. setProxyTargetClass 로 프록시 객체를 JDK Dynamic Proxy 로 할 것인지 CGLIB 으로 할 것인지 판단할 수 있다.
DataSource 의 getConnection 메서드가 호출되면 먼저 returnValue 로 target 클래스를 응답받고, target 클래스에 대한 프록시 객체를 생성하여 반환한다.
프록시 객체는 connection 객체의 메서드를 호출하면 pointcut 으로 AOP 를 적용할 메서드를 확인하고 맞으면 위의 invoke 내부의 메서드를 실행한다.