[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;
}
}
๋ฉ์๋ ์๊ท๋จผํธ๋ก ๋น ๊ฐ์ฒด์ ๋น ์ด๋ฆ์ ๋ฐ์์ ๋น ๊ฐ์ฒด๋ง๋ค ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
๋ ๋ฉ์๋ ๋ชจ๋ ๋น ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ์ฌ ๋ง๋ฌด๋ฆฌํ๋ค.
๋๊ธ