์ธํ๋ฐ ์คํ๋ง ํต์ฌ ์๋ฆฌ ๊ธฐ๋ณธํธ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
์คํ๋ง ๋น์ ์ด๋ฒคํธ ๋ผ์ดํ์ฌ์ดํด
์คํ๋ง ์ปจํ ์ด๋ ์์ฑ → ์คํ๋ง ๋น ์์ฑ(์์ฑ์ ์ฃผ์ ) → ์์กด๊ด๊ณ ์ฃผ์ (์์ ์ ์ฃผ์ , ํ๋ ์ฃผ์ ) → ์ด๊ธฐํ ์ฝ๋ฐฑ → ์ฌ์ฉ → ์๋ฉธ์ ์ฝ๋ฐฑ → ์คํ๋ง ์ข ๋ฃ
์คํ๋ง์ ๋น ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ ์ง์
์ธํฐํ์ด์ค(InitializingBean, DisposableBean)
์คํ๋ง ์ด์ฐฝ๊ธฐ์ ๋์จ ๋ฐฉ๋ฒ, ํ์ฌ๋ ๋ ๋์ ๋ฐฉ๋ฒ๋ค ์กด์ฌ
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
//์ธํฐํ์ด์ค(InitializingBean, DisposableBean)
public class NetworkClient implements InitializingBean, DisposableBean {
...
//์์กด๊ด๊ณ ์ฃผ์
์ด ๋๋๋ฉด ํธ์ถํ ๊ฒ!
@Override
public void afterPropertiesSet() throws Exception {
connect(); //์๋น์ค ์์ ์ ํธ์ถ๋๋ ๋ฉ์๋
call("์ด๊ธฐํ ์ฐ๊ฒฐ ๋ฉ์์ง"); //public void call(String message){}
}
//์คํ๋ง ๋น์ด ์ข
๋ฃ๋ ๋ ํธ์ถํ ๊ฒ!
@Override
public void destroy() throws Exception {
disconnect(); //์๋น์ค ์ข
๋ฃ ์ ํธ์ถ๋๋ ๋ฉ์๋
}
}
public class BeanLifCycleTest {
@Test
public void lifeCycleTest() {
ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);
NetworkClient client = ac.getBean(NetworkClient.class);
ac.close();
}
@Configuration
static class LifeCycleConfig {
@Bean
public NetworkClient networkClient() {
NetworkClient networkClient = new NetworkClient();
networkClient.setUrl("http://aaaa.dev");
return networkClient;
}
}
}
๋จ์
์คํ๋ง ์ ์ฉ ์ธํฐํ์ด์ค → ์คํ๋ง ์ ์ฉ ์ธํฐํ์ด์ค์ ์์กด
์ด๊ธฐํ, ์๋ฉธ ๋ฉ์๋์ ์ด๋ฆ ๋ณ๊ฒฝ ๋ถ๊ฐ
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฉ ๋ถ๊ฐ
์ค์ ์ ๋ณด์ ์ด๊ธฐํ ๋ฉ์๋, ์ข ๋ฃ ๋ฉ์๋ ์ง์
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๊ธฐํ, ์ข ๋ฃํด์ผ ํ ๋ ์ฌ์ฉ
//์ค์ ์ ๋ณด์ ์ด๊ธฐํ ๋ฉ์๋, ์ข
๋ฃ ๋ฉ์๋ ์ง์
public class NetworkClient {
...
public void init() {
connect(); //์๋น์ค ์์ ์ ํธ์ถ๋๋ ๋ฉ์๋
call("์ด๊ธฐํ ์ฐ๊ฒฐ ๋ฉ์์ง"); //public void call(String message){}
}
public void close() {
disconnect(); //์๋น์ค ์ข
๋ฃ ์ ํธ์ถ๋๋ ๋ฉ์๋
}
}
public class BeanLifCycleTest {
@Test
public void lifeCycleTest() {
ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);
NetworkClient client = ac.getBean(NetworkClient.class);
ac.close();
}
@Configuration
static class LifeCycleConfig {
//initMethod, destroyMethod ์ง์
@Bean(initMethod = "init", , destroyMethod = "close")
public NetworkClient networkClient() {
NetworkClient networkClient = new NetworkClient();
networkClient.setUrl("http://hello-spring.dv");
return networkClient;
}
}
}
ํน์ง
๋ฉ์๋ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์์ฑ
์คํ๋ง ๋น์ด ์คํ๋ง ์ฝ๋์ ์์กด X
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ด๊ธฐํ, ์ข ๋ฃ ๋ฉ์๋ ์ ์ฉ ๊ฐ๋ฅ
์ข ๋ฃ ๋ฉ์๋ ์ถ๋ก (@Bean์ destroyMethod ์์ฑ)
๋๋ถ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข ๋ฃ ๋ฉ์๋ ์ด๋ฆ : 'close', 'shutdown'
@Bean์ destroyMethod๋ ๊ธฐ๋ณธ๊ฐ์ด (inferred) ์ถ๋ก ์ผ๋ก ๋ฑ๋ก → 'close', 'shutdown' ๋ผ๋ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ํธ์ถ (์ข ๋ฃ ๋ฉ์๋๋ฅผ ์ถ๋ก ํด์ ํธ์ถ)
์ง์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ฉด ์ข ๋ฃ ๋ฉ์๋๋ ๋ฐ๋ก ์์ฑํ์ง ์์๋ ๋์
์ถ๋ก ๊ธฐ๋ฅ OFF : destroyMethod="" (๊ณต๋ฐฑ์ผ๋ก ์ง์ )
@PostConstruct, @PreDestory ์ ๋ ธํ ์ด์ ์ง์
์ต์ ์คํ๋ง์์ ๊ฐ์ฅ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
//์ค์ ์ ๋ณด์ ์ด๊ธฐํ ๋ฉ์๋, ์ข
๋ฃ ๋ฉ์๋ ์ง์
public class NetworkClient {
...
@PostConstruct
public void init() {
connect(); //์๋น์ค ์์ ์ ํธ์ถ๋๋ ๋ฉ์๋
call("์ด๊ธฐํ ์ฐ๊ฒฐ ๋ฉ์์ง"); //public void call(String message){}
}
@PreDestroy
public void close() {
disconnect(); //์๋น์ค ์ข
๋ฃ ์ ํธ์ถ๋๋ ๋ฉ์๋
}
}
public class BeanLifCycleTest {
@Test
public void lifeCycleTest() {
ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);
NetworkClient client = ac.getBean(NetworkClient.class);
ac.close();
}
@Configuration
static class LifeCycleConfig {
@Bean
public NetworkClient networkClient() {
NetworkClient networkClient = new NetworkClient();
networkClient.setUrl("http://aaaa.dev");
return networkClient;
}
}
}
ํน์ง
ํจํค์ง jakarta.annotation.PostConstruct : ์คํ๋ง์ ์ข ์์ ์ธ ๊ธฐ์ ์ด ์๋๋ผ ์๋ฐ ํ์ค → ์คํ๋ง์ด ์๋ ๋ค๋ฅธ ์ปจํ ์ด๋์์๋ ๋์
์ปดํฌ๋ํธ ์ค์บ๊ณผ ์ ์ด์ธ๋ฆผ
์ ์ผํ ๋จ์ ์ธ๋ถ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฉ ๋ถ๊ฐ → @Bean์ ๊ธฐ๋ฅ initMethod, destroyMethod์ ์ฌ์ฉํ์
'๐ Spring > Lecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| @ModelAttribute์ Model (0) | 2025.04.04 |
|---|---|
| ๋น ์ค์ฝํ (0) | 2025.03.25 |
| Annotation ์ง์ ์์ฑ (0) | 2025.03.24 |
| ์กฐํ ๋น์ด 2๊ฐ ์ด์์ผ ๋ (0) | 2025.03.24 |
| ์์กด๊ด๊ณ ์ฃผ์ (0) | 2025.03.24 |
