스프링 핵심 원리

[spring] PROXY, 싱글톤이 프로토 타입을 가지고 있을 경우의 문제와 해결

notx2wice 2021. 11. 2. 15:37

문제점

싱글톤 안의 프로토 타입의 빈은 싱글톤처럼 사용이 되는 문제.

 

해결 방안

1. 프로토 타입의 빈을 참조로 가지는 것이 아니라 필요한 순간 컨테이너에서 주입받아서 사용한다.

- 스프링 컨테이너에 종속적 이게 됨, 단위 테스트가 어려워짐

2.ObjectProvider사용

@Autowired
  private ObjectProvider<PrototypeBean> prototypeBeanProvider;
  public int logic() {
      PrototypeBean prototypeBean = prototypeBeanProvider.getObject();
      prototypeBean.addCount();
      int count = prototypeBean.getCount();
      return count;
}
//사용 예시

- 스프링에 의존적

3.JSR-330 Provider 

프로토 타입뿐만이 아닌 리퀘스트 타입 등에도 적용될 수 있음

4. 프록시를 만들어 일단 실행시킨다.

->CGLIB라이브러리를 사용한 객체가 생성됨을 확인할 수 있음