티스토리 뷰
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()를 재정의해야한다. InitializingBean와 DisposableBean 모두 상속할 수 있다.
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.) - 신입 프로그래머를 위한 강좌
'Programming > Spring' 카테고리의 다른 글
스프링 MVC 패턴과 DispatcherServlet (0) | 2022.04.02 |
---|---|
Java파일 (어노테이션)을 이용한 스프링 컨테이너 설정 (0) | 2022.03.22 |
스프링 DI Annotation - @Autowired, @Inject 정리 (0) | 2022.03.18 |
스프링 의존객체 선택 (0) | 2022.03.17 |
스프링 어노테이션을 활용한 의존객체 자동주입 (0) | 2022.03.12 |
- Total
- Today
- Yesterday
- 프로그래머스
- 데이터베이스
- Java
- 인턴
- 개발용어
- 스프링부트
- 환경설정
- C++
- 오라클
- JVM
- SQL
- 이클립스
- Thymeleaf
- JSP
- 국비교육
- CS
- 넥사크로
- 백준
- Open API
- 부트스트랩
- svn
- 오류
- CSS
- HeidiSQL
- 네트워크
- C
- 스프링
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |