Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
titleClient
public Client {
	UserService userService = new UserServiceTx();
	userService.add(new User());
	userService.upgradeLevels();
}


In GoF...

  • remote proxy

    • RMI, CORBA, XML/SOAP  등
    • network 연결의 한 종단에 존재, network의 다른 쪽에 있는 객체와 동일한 interface를 구현

  • virtual proxy
    • 값 비싼 객체를 필요로 할 때 생성하는 proxy
    • lazy initialization
  • protection proxy
    • 내부 객체에 대한 접근 제어
    • Collections.synchronizedCollection(), Collections.unmodifiableCollection() 등이 반환하는 Collection 인터페이스 구현체
  • smart reference
    • java.util.WeakHashMap은 Weak Reference를 사용하며, proxy의 일종이라 할 수 있음.

JDK Dynamic Proxy

프록시 사용은 좋은 발상이지만, 사용하기 불편하다. 매번 새로운 class 정의하고, interface의 구현 메소드가 많으면 모든 method 구현햇 위임하는 코드 만들어야 함.

...

Code Block
languagejava
titleClient
public Client {
   UserService target = new UserServiceImpl();
   UserService userService = Proxy.newProxyInstance(target.getClass().getClassLoader(),
                             new Class[]{UserService.class},
                             new UserServiceTx(target));
   userService.add(new User());
   userService.upgradeLevels();
}

In Spring

  • spring AOP
  • spring `@Trasactional`