본문 바로가기
Framework/Spring Framework

[Spring Framework] 생명주기 (Life Cycle)와 범위

by 원동호 2018. 7. 24.

- 스프링 컨테이너 주기

//스프링 컨테이너 생성 , parameter가 없는 default 생성자로 생성할경우 load후 refresh를 꼭 해주어야함!! 
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();	 
//스프링 컨테이너 설정 
ctx.load("classpath:applicationCTX.xml");
// 스프링 컨테이너사용 
ctx.refresh(); 
Student student = ctx.getBean("student", Student.class);	
System.out.println("이름 : " + student.getName()); 
System.out.println("나이 : " + student.getAge());	 c
// 스프링 컨테이너 종료
ctx.close();
/* ※ctx.close()의 경우 컨테이너가 소멸 하는 단계이다.  
 *	컨테이너가 소멸 하면, 빈은 자동으로 소멸 된다. 빈만 소멸하게 하고싶다면, 
 *	destroy() API를 이용하면 된다! 
 */ 

 

- 스프링 빈 생명주기

1) implemetns InitializingBean , DisposableBean(interface)

굳이 두가지를 다 사용하지 않아도 되지만 초기화될때, 소멸할 때

뭔가를 취해주고(?) 싶을 때 사용하면 된다.

//빈 초기화 과정에서 호출된다. -> ctx.refresh(); 
@Override 
public void afterPropertiesSet() throws Exception { 		
	System.out.println("afterPropertiesSet()"); 	
}  

//빈 소멸 과정에서 생성 된다. -> ctx.close(); 
@Override 
public void destroy() throws Exception { 	
	System.out.println("destroy()"); 	
} 

 

2) @PostConstruct, @PreDestroy 어노테이션을 사용

//빈 초기화 과정에서 호출된다. -> ctx.refresh(); 
@PostConstruct 
public void initMethod() { 	
	System.out.println("initMethod()"); 
} 

//빈 소멸 과정에서 생성 된다. -> ctx.close(); 
@PreDestroy 
public void destroyMethod() { 	
	System.out.println("destroyMethod()"); 
} 

 

- 스프링 빈 범위(scope)

 

스프링 컨테이너가 생성되고, 스프링 빈이 생성 될 때, 생성된 스프링 빈은 scope를 가지고 있다.

범위란 쉽게 생각해서 해당하는 객체가 어디까지 영향을 미치는지 결정하는 것이라고 생각하면 된다.

스프링은 기본적으로 싱글톤 객체로 관리된다.(default가 singleton)

 

 

댓글0