프록시는 기존 코드에 영향을 주지 않으면서 타깃의 기능을 확장하거나 접근 방법을 제어할 수 있는 유일한 방법이다.
UserServiceTx 프록시의 기능 구분: 위임과 부가기능
public class UserServiceTx implements UserService{
// 타깃 오브젝트
UserService userService;
// 메서드 구현과 위임
@Override
public void add(User user) {
userService.add(user);
}
// 메서드 구현
@Override
public void upgradeLevels() {
// 부가기능 수행
TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
try{
// 위임
userService.upgradeLevels();
// 부가기능 수행
this.transactionManager.commit(status);
}catch (RuntimeException e){
this.transactionManager.rollback(status);
throw e;
}
}
}
위 문제를 해결하는데 유용한 것이 바로 JDK 의 다이나믹 프록시
다이내믹 프록시는 리플렉션 기능을 이용해서 프록시를 만들어준다.