티스토리 뷰

Bean객체를 이용하기 위해선 스프링 컨테이너를 생성해준 뒤 getBean을 통해 객체를 가져오는 과정을 거쳐야한다. 이 때 컨테이너와 Bean이 생성되는 시점과 소멸되는 시점에 특정한 작업을 필요한 경우 생명주기를 알아야한다. 

 

 

컨테이너 생성 = Bean객체 생성

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:appCtx.xml");
ctx.close();

스프링 컨테이너가 초기화되면 xml상에 작성된 Bean 객체 또한 같이 생성된다. 이후 ctx.close()를 이용해 스프링 컨테이너를 메모리에서 해제하게 되면 생성된 Bean 객체 또한 같이 해제되므로, Bean객체의 생성과 소멸시점은 스프링컨테이너와 동일하다고 할 수 있다.

 

appCtx.xml

<bean id="bookDao" 		class="com.brms.book.dao.BookDao" />
<bean id="bookRegisterService"  class="com.brms.book.service.BookRegisterService" />
<bean id="bookSearchService"    class="com.brms.book.service.BookSearchService" />

스프링 컨테이너상에 명시된 Bean목록이다. 

 

afterPropertiesSet() - 생성시점에 실행할 작업 지정

public class BookRegisterService implements InitializingBean{
	@Autowired
	private BookDao bookDao;
	
	public BookRegisterService() { }
    
    	@Override
	public void afterPropertiesSet() throws Exception{
		System.out.println("BookRegisterService Create");
	}
}

클래스가 InitializingBean을 상속하게되면 반드시 afterPropertiesSet()을 재정의 해야하는데 이 메소드상에 컨테이너 생성 직후 작업할 내용을 입력하면된다.

 

destroy() - 소멸시점에 실행할 작업 지정

public class BookRegisterService implements DisposableBean{
	@Autowired
	private BookDao bookDao;
	
	public BookSearchService() { }
    
    	@Override
	public void destroy() throws Exception{
		System.out.println("BookRegisterService Destroy");
	}
}

DisposableBean을 상속하게되면 destroy()를 재정의해야한다. InitializingBeanDisposableBean 모두 상속할 수 있다. 

 

Main.java 실행결과

public class Main {
	public static void main(String[] args) {
    	   GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:appCtx.xml");
           ctx.close();
	}
}
INFO: Loading XML bean definitions from class path resource [appCtx.xml]
3월 19, 2022 6:23:42 오후 org.springframework.context.support.GenericXmlApplicationContext prepareRefresh
Dao Create
BookRegisterService Create
BookSearchService Create
3월 19, 2022 6:23:42 오후 org.springframework.context.support.GenericXmlApplicationContext doClose
BookSearchService destroy
BookRegisterService Destroy
Dao Destroy

Dao 및 SearchService Java 파일에도 지정한 뒤 Main을 실행시키면 각 Bean객체마다 지정해준 작업이 언제 실행되는지 알 수 있다.

 

 

Bean태그 속성활용

상속을 통해 메소드를 지정할 수도 있지만 컨테이너 상의 bean 태그 속성을 이용할 수도 있다. init-method는 생성시점, destroy-method 속성은 소멸시점에 동작할 작업을 명시해준다.

 

appCtx.xml 수정

<bean id="bookRegisterService"  class="com.brms.book.service.BookRegisterService" 
      init-method="initMethod" destroy-method="destroyMethod"/>

BookRegisterService.java

public class BookRegisterService {
	@Autowired
	private BookDao bookDao;
	
	public BookRegisterService() { }

	public void initMethod() {
		System.out.println("BookRegisterService Create - xml");
	}
	
	public void destroyMethod() {
		System.out.println("BookRegisterService Destroy - xml");
	}
}

컨테이너에 명시된 속성 값과 동일한 이름의 메소드를 작성해준다. 

 

실행결과

INFO: Loading XML bean definitions from class path resource [appCtx.xml]
3월 19, 2022 6:50:24 오후 org.springframework.context.support.GenericXmlApplicationContext prepareRefresh
Dao Create
BookRegisterService Create - xml
BookSearchService Create
3월 19, 2022 6:50:24 오후 org.springframework.context.support.GenericXmlApplicationContext doClose
BookSearchService destroy
BookRegisterService Destroy - xml
Dao Destroy

 

실행결과2

INFO: Loading XML bean definitions from class path resource [appCtx.xml]
3월 19, 2022 6:53:24 오후 org.springframework.context.support.GenericXmlApplicationContext prepareRefresh
Dao Create
BookRegisterService Create - impl
BookRegisterService Create - xml
BookSearchService Create
3월 19, 2022 6:53:24 오후 org.springframework.context.support.GenericXmlApplicationContext doClose
BookSearchService destroy
BookRegisterService Destroy - impl
BookRegisterService Destroy - xml
Dao Destroy

BookRegisterService.java 코드에 implements와 init-method와 destroy-method를 모두 적용한 뒤 실행해본 결과  implements를 통한 작업이 더 먼저 실행되는걸 확인했다.

 

 

 

출처 : [인프런] 자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함