상세 컨텐츠

본문 제목

[1.6] 싱글톤 레지스트리와 오브젝트 스코프

토비의스프링

by 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가 만들어지지 않는다. 

 

##싱글통 레지스트리로서의 애플리케이션 컨텍스트 

 

애플리케이션 컨텍스트는 싱글톤을 저장하고 관리하는 싱글톤 레지스트리기도 하다.

스프링은 기본적으로 내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다.

 

 

 

 

'토비의스프링' 카테고리의 다른 글

[1.8] XML을 이용한 설정  (0) 2020.10.27
[1.7] 의존관계 주입  (0) 2020.10.27
[1.5]Spring IoC  (0) 2020.10.27
[1.4] 제어의 역전  (0) 2020.10.27
[1.3] DAO의 확장  (0) 2020.10.27

관련글 더보기

댓글 영역