[Spring] 스프링 빈(Bean) 초기화, 소멸 시 특정 작업을 하는 방법
[Spring] 스프링 빈(Bean)이 초기화, 소멸 시 특정 작업을 하는 방법
방법 1: InitializingBean, DisposableBean 인터페이스 구현
방법 2: 스프링 XML 설정 사용
1. 인터페이스 구현
Spring에서 제공하는 InitializingBean, DisposableBean 인터페이스를 구현한다.
public class BookDao implements InitializingBean, DisposableBean {
@Override
public void afterPropertiesSet() throws Exception {
// 빈 초기화 시 코드 구현
}
@Override
public void destroy() throws Exception {
// 빈 소멸 시 코드 구현
}
}
InitializingBean 인터페이스의 afterPropertiesSet() 메소드에 빈 객체 초기화 시 필요한 코드를 구현하고 DisposableBean 인터페이스의 destroy() 메소드에 빈 객체 소멸 시 필요한 코드를 구현한다.
2. 스프링 XML 설정
XML 설정 파일
<bean id="bookRegisterService" class="com.brms.book.service.BookRegisterService"
init-method="initMethod" destroy-method="destroyMethod"/>
<bean> 태그의 init-method, destroy-method 속성을 사용해서 1번 방법과 동일한 기능을 구현할 수 있다.
init-method에 빈 객체 초기화 시 호출할 메소드 이름을, destroy-method 속성에 빈 객체 소멸 시 호출할 메소드 이름을 설정한다.
자바 코드
public class BookRegisterService {
public void initMethod() {
// 빈 초기화 시 코드 구현
}
public void destroyMethod() {
// 빈 소멸 시 코드 구현
}
}
해당하는 클래스에서 init-method, destroy-method 속성에 설정한 각 메소드를 구현한다.
3. default-init-method와 default-destroy-method
스프링 XML 설정에서 <beans> 레벨에 설정할 수 있는 속성이다.
init-method와 destroy-method 속성이 설정되어 있지 않으면 해당 빈의 생성, 소멸 시 기본적으로 호출할 메소드를 설정한다.
자바 코드
public class BookRegisterService {
public void defaultInitMethod() {
// 빈 초기화 시 코드 구현
}
public void defaultDestroyMethod() {
// 빈 소멸 시 코드 구현
}
}
XML 설정
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
default-init-method="defaultInitMethod" default-destroy-method="defaultDestroyMethod">
<beans>에 default-init-method, default-destroy-method 속성을 추가하고 메소드 이름을 설정한다.
모두 설정되어 있다면 <bean>의 init-method, destroy-method가 우선시된다.
4. BeanPostProcessor
빈 객체 생성
⬇️
[ BeanPostProcessor.postProcessBeforeInitialization ]
⬇️
init-method
⬇️
[ BeanPostProcessor.postProcessAfterInitialization ]
Spring은 객체가 생성될 때 init-method로 지정된 메서드가 호출되기 전, 후에 추가적인 다른 메서드를 호출할 수 있도록 지원한다.
이 기능은 BeanPostProcessor 인터페이스를 구현하여 사용할 수 있다.
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class TestBeanPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// 코드 구현...
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// 코드 구현...
return bean;
}
}
메소드 아규먼트로 빈 객체와 빈 이름을 받아서 빈 객체마다 다른 처리를 할 수 있다.
두 메소드 모두 빈 객체를 리턴하여 마무리한다.
'Spring Framework > Spring Core' 카테고리의 다른 글
AspectJ Weaver를 사용한 XML 기반의 스프링 AOP 구현 방법 (0) | 2021.04.22 |
---|---|
[Spring] @Component 애노테이션 및 함께 사용하는 애노테이션 정리 (0) | 2021.04.22 |
[Spring] 애노테이션을 이용한 빈 설정 방법 정리 (0) | 2021.04.22 |
[Spring] 스프링 XML 설정 → 애노테이션 설정 변환 방법 (0) | 2021.04.22 |
[Spring] 의존성 주입 애노테이션 정리 - @Autowired, @Resource, @Inject (0) | 2021.04.22 |
[Spring] 스프링 XML 설정 파일 작성 방법 정리 (0) | 2021.04.22 |
Servlet에서 스프링 ApplicationContext 사용하기 (0) | 2021.04.22 |
[Spring] SpEL - Spring Expression Language (0) | 2021.04.22 |