토비의스프링
[1.6] 싱글톤 레지스트리와 오브젝트 스코프
kwanghyup
2020. 10. 27. 20:33
DaoFactory를 직접 생성해서 사용하는 것과
스프링 애플리케이션 컨텍스트를 통해 사용하는 것의
차이점을 비교해보자.
package springbook.mytest;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import springbook.user.dao.DaoFactory;
import springbook.user.dao.UserDao;
public class NewVsSpringTest {
public static void main(String[] args) {
DaoFactory factory = new DaoFactory();
UserDao dao1 = new DaoFactory().userDao();
UserDao dao2 = new DaoFactory().userDao();
System.out.println("new 키워드 이용");
System.out.println(dao1);
System.out.println(dao2);
}
}
여러번 실행시킨 결과를 보면 매번 다른 오브젝트가 다른것을 알 수 있다.
스프링의 애플리케이션 컨텍스트를 통해
DaoFactory를 사용하자.
아래의 코드를 메인메소드에 추가한다.
System.out.println("-----------------------");
System.out.println("ApplicationContext 이용");
ApplicationContext context =
new AnnotationConfigApplicationContext(DaoFactory.class);
UserDao dao3 = context.getBean("userDao", UserDao.class);
UserDao dao4 = context.getBean("userDao", UserDao.class);
System.out.println(dao3);
System.out.println(dao4);
이 코드를 실행하면 다음과 같다.
스프링은 여러 번에 걸쳐 빈을 요청하더라도
매번 동일한 오브젝트를 돌려준다.
getBean()을 실행할 때마다 userDao()메소드를 호출하고
매번 new에 의해 새로운 UserDao가 만들어지지 않는다.
##싱글통 레지스트리로서의 애플리케이션 컨텍스트
애플리케이션 컨텍스트는 싱글톤을 저장하고 관리하는 싱글톤 레지스트리기도 하다.
스프링은 기본적으로 내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다.