์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- Android Studio
- ์ฑ์ฉํ์ ํ
- FACTORY
- reflection
- OpenAPI
- udp
- Python
- di
- ํ๋ IT&E
- Dialog
- ์ฝ๋์
- uri
- Factory Method Pattern
- AndroidStudio
- ์ด๋ ธํ ์ด์
- fontstyle
- OOP
- 2024-08-21
- ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ
- Kotlin
- datepicker
- 2024-08-20
- URN
- IOC
- swagger
- http method
- menutab
- tcp
- ๊ธฐ์ด100์
- url
dingdong coding
Bean Life Cycle ๋ณธ๋ฌธ
Spring Container๋ ์๋ฐ ๊ฐ์ฒด(Bean)์ ์์ฑ๊ณผ ์๋ฉธ ๊ฐ์ ์๋ช ์ฃผ๊ธฐ(Life Cycle)๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์์ฑ๋ ์๋ฐ ๊ฐ์ฒด๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค.
Bean Life Cycle
โข Spring์ Bean์ Java ๋๋ XML bean ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ์ธ์คํด์คํ ๋์ด์ผ ํฉ๋๋ค.
โข Bean์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ๋ก ๋ง๋ค๊ธฐ ์ํด ์ฌ์ , ์ฌํ ์ด๊ธฐํ ๋จ๊ณ๋ฅผ ์ํํด์ผํ ์๋ ์์ต๋๋ค.
โข ๊ทธ ํ Bean์ด ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด Ioc Container์์ ์ ๊ฑฐ๋ฉ๋๋ค.
โข ๋ค๋ฅธ ์์คํ
๋ฆฌ์์ค๋ฅผ ํด์ ํ๊ธฐ ์ํด ์ฌ์ ๋ฐ ์ฌํ ์๋ฉธ ๋จ๊ณ๋ฅผ ์ํํด์ผํ ์๋ ์์ต๋๋ค.
์ฆ, Bean์ Life Cycle์ด๋ ํด๋น ๊ฐ์ฒด๊ฐ ์ธ์ , ์ด๋ป๊ฒ ์์ฑ๋์ด ์๋ฉธ๋๊ธฐ ์ ๊น์ง ์ด๋ค ์์ ์ ์ํํ๊ณ ์ธ์ , ์ด๋ป๊ฒ ์๋ฉธ๋๋์ง ์ผ๋ จ์ ๊ณผ์ ์ ์ด๋ฅด๋ ๋ง์ ๋๋ค.
Spring Container๋ ์ด๋ฐ ๋น ๊ฐ์ฒด์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ปจํ
์ด๋์ ์๋ช
์ฃผ๊ธฐ ๋ด์์ ๊ด๋ฆฌํ๊ณ ๊ฐ์ฒด ์์ฑ์ด๋ ์๋ฉธ ์ ํธ์ถ๋ ์ ์๋ ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
โข Spring Container
- ์ด๊ธฐํ : Bean์ ๋ฑ๋ก, ์์ฑ, ์ฃผ์
- ์ข
๋ฃ : Bean ๊ฐ์ฒด๋ค์ ์๋ฉธ
โข ์ฝ๋ฐฑ
: ์ฝ๋ฐฑํจ์๋ฅผ ๋ถ๋ฅผ ๋ ์ฌ์ฉ๋๋ ์ฉ์ด์ด๋ฉฐ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฑ๋กํ๋ฉด ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํด๋น ๋ฉ์๋๊ฐ ํธ์ถ๋จ
: ์ฆ, ์กฐ๊ฑด์ ๋ฐ๋ผ ์คํ๋ ์๋ ์คํ๋์ง ์์ ์๋ ์๋ ๊ฐ๋
์ด๋ฅผ ํ ๋๋ก ๊ฐ๋จํ ์คํ๋ง Bean Life Cycle ์ ์์ฝํ๋ฉด
1 ) ์คํ๋ง ์ปจํ
์ด๋ ์์ฑ
2 ) ์คํ๋ง ๋น ์์ฑ
3 ) ์์กด์ฑ ์ฃผ์
4 ) ์ด๊ธฐํ ์ฝ๋ฐฑ : ๋น์ด ์์ฑ๋๊ณ , ๋น์ ์์กด๊ด๊ณ ์ฃผ์
์ด ์๋ฃ๋ ํ ํธ์ถ
5 ) ์ฌ์ฉ
6 ) ์๋ฉธ์ ์ฝ๋ฐฑ : ๋น์ด ์๋ฉธ๋๊ธฐ ์ง์ ์ ํธ์ถ
7 ) ์คํ๋ง ์ข
๋ฃ
โข ์ด์ฒ๋ผ ์คํ๋ง ๋น์ ์์ฑ๊ณผ ์์กด์ฑ ์ฃผ์
์ด ๋๋ ํ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ค๋น๊ฐ ๋ฉ๋๋ค. ๋ํ ์์กด ๊ด๊ณ ์ฃผ์
์ด ์๋ฃ๋๋ ์์ ๊ณผ ์ข
๋ฃ๋๋ ์์ ์ ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ํตํด ์ ์ ์์ต๋๋ค.
Spring ๋น ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ
Spring Framework๋ ๋น ๋ผ์ดํ ์ฌ์ดํด์ ์ ์ดํ๊ธฐ ์ํ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ ๊ณตํด์ค๋๋ค.
1. InitializingBean, DisposableBean callback interfaces
2. ์ค์ ์ ๋ณด์ ์ด๊ธฐํ ๋ฉ์๋ init( ), ์ข
๋ฃ ๋ฉ์๋ destory( ) ์ง์ ํ๋ ๋ฐฉ๋ฒ
3. @PostConstruct, @PreDestroy ์ ๋
ธํ
์ด์
๊ฐ๊ฐ์ ๋ฐฉ๋ฒ์ ๋ํด ๋ ์์ธํ ์์๋ด
์๋ค.
1. InitializingBean, DisposableBean callback interfaces
โข InitializingBean
: ๋น์ ํ์ํ ๋ชจ๋ ์์ฑ์ด ์ปจํ
์ด๋์ ์ค์ ๋ ํ์ ๋น์ ์ด๊ธฐํ ์์
์ ์ํํ๋๋ก ํฉ๋๋ค.
void afterPropertiesSet() throws Exception;
: afterPropertiesSet() ๋ฉ์๋๋ก ์ด๊ธฐํ๋ฅผ ์ง์ํฉ๋๋ค.
: ์์กด ๊ด๊ณ ์ฃผ์
์ด ๋๋ ํ ์ด๊ธฐํ ์งํ
โข DisposableBean
: ์คํ๋ง ์ปจํ
์ด๋๊ฐ ๋น์ ์๋ฉธ์ํค๊ธฐ ์ ์ ์ฝ๋ฐฑ์ ์ป์ ์ ์๋ค.
void destroy() throws Exception;
: destory() ๋ฉ์๋๋ก ์๋ฉธ์ ์ง์ํฉ๋๋ค.
: Bean ์ข
๋ฃ ์ ๋ง๋ฌด๋ฆฌ ์์
ex) ์์ํด์ close( ) ๋ฑ
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class DemoBean implements InitializingBean, DisposableBean
{
//Other bean attributes and methods
@Override
public void afterPropertiesSet() throws Exception
{
//Bean initialization code
}
@Override
public void destroy() throws Exception
{
//Bean destruction code
}
}
๋จ์
: ํด๋น ์ธํฐํ์ด์ค๋ ์คํ๋ง ์ ์ฉ ์ธํฐํ์ด์ค๋ก ํด๋น ์ฝ๋๊ฐ ์ธํฐํ์ด์ค์ ์์กดํ๋ค.
: ์ด๊ธฐํ, ์๋ฉธ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ๊ธฐ ๋๋ฌธ์ ๋ฉ์๋๋ช
์ ๋ณ๊ฒฝํ ์ ์๋ค.
: ์ฝ๋๋ฅผ ๊ณ ์น ์ ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฉ ๋ถ๊ฐ๋ฅํ๋ค.
๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ด๊ธฐํ ๋ฐ ์ข
๋ฃ ๋ฐฉ๋ฒ์ ์คํ๋ง ์ด์ฐฝ๊ธฐ์ ๋์จ ๋ฐฉ๋ฒ๋ค์ด๋ฉฐ, ์ง๊ธ์ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
2. ์ค์ ์ ๋ณด์ ์ฌ์ฉ์ ์ ์ ์ด๊ธฐํ ๋ฉ์๋, ์ข ๋ฃ ๋ฉ์๋ ์ง์
์ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ง ์๊ณ @Bean ์ด๋ ธํ ์ด์ ์ initMethod, destroyMethod ์์ฑ์ ์ฌ์ฉํ์ฌ ์ด๊ธฐํ, ์๋ฉธ ๋ฉ์๋๋ฅผ ๊ฐ๊ฐ ์ง์ ํ ์ ์์ต๋๋ค.
public class ExampleBean {
public void init() throws Exception {
//์ด๊ธฐํ ์ฝ๋ฐฑ
}
public void close() throws Exception {
// ์๋ฉธ ์ ์ฝ๋ฐฑ
}
}
@Configuration
class LifeCycleConfig {
@Bean(initMethod = "init", destroyMethod = "close")
public ExampleBean exampleBean() {
}
}
โข ์ด๋ ์์ ํ ์ ์๋ ์ธ๋ถ ํด๋์ค, ์ ํํ ์์ ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ์ํฌ ์ ์๋ ํด๋์ค์ ๊ฐ์ฒด ์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋กํ ๋ ์ ์ฉํฉ๋๋ค.
โข ๋ฉ์๋ ๋ช
์ ์์ ๋กญ๊ฒ ๋ถ์ฌํ ์์๊ณ , ์คํ๋ง ์ฝ๋์ ์์กดํ์ง ์์ต๋๋ค.
โข ์ค์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ๊ณ ์น ์ ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ด๊ธฐํ, ์ข
๋ฃ ๋ฉ์๋๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
3. @PostConstruct, @PreDestroy ์ ๋ ธํ ์ด์
โข @PostConstruct
: ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ด ์์ฑ๋ ํ ์ธ์คํด์ค๊ฐ ์์ฒญ ๊ฐ์ฒด์ ๋ฐํ๋๊ธฐ ์ง์ ์ ์ฃผ์์ด ๋ฌ๋ฆฐ ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
โข @PreDestroy
: @PreDestroy์ฃผ์์ด ๋ฌ๋ฆฐ ๋ฉ์๋๋ bean์ด bean ์ปจํ
์ด๋ ๋ด๋ถ ์์ ํ๊ดด๋๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค .
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class DemoBean
{
@PostConstruct
public void customInit()
{
System.out.println("Method customInit() invoked...");
}
@PreDestroy
public void customDestroy()
{
System.out.println("Method customDestroy() invoked...");
}
}
โข ์ต์ ์คํ๋ง์์ ๊ฐ์ฅ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋
ธํ
์ด์
ํ๋๋ง ๋ถ์ด๋ฉด ๋๋ฏ๋ก ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค.
โข ํจํค์ง๋ฅผ ์ ๋ณด๋ฉด javax.annotation.PostConstruct ๋ก ์คํ๋ง์ ์ข
์์ ์ธ ๊ธฐ์ ์ด ์๋๋ผ JSR-250 ๋ผ๋ ์๋ฐ ํ์ค์
๋๋ค.๋ฐ๋ผ์ ์คํ๋ง์ด ์๋ ๋ค๋ฅธ ์ปจํ
์ด๋์์๋ ๋์ํฉ๋๋ค.
โข ์ ์ผํ ๋จ์ ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ ์ฉํ์ง ๋ชปํ๋ค๋ ์ ์
๋๋ค.
ํ์ต์ ๋ง์ ๋์์ด ๋ ๋ธ๋ก๊ทธ ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ต๋๋ค. ๐
์ฐธ์กฐ ๋ฐ ์ถ์ฒ
Spring โ Bean Life Cycle
Spring์ ๋น ์๋ช
์ฃผ๊ธฐ(Bean Lifecycle)
[Spring] ๋น ์๋ช
์ฃผ๊ธฐ(Bean LifeCycle) ์ฝ๋ฐฑ ์์๋ณด๊ธฐ
'๐Spring > Basic' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Bean Scope - ProtoType Scope (0) | 2022.06.23 |
---|---|
Spring Singleton (0) | 2022.06.22 |
JDBC vs JDBC Template vs JPA (0) | 2022.06.18 |
Spring Framework, Spring Boot (0) | 2022.06.18 |
Spring Bean, Spring Container (0) | 2022.06.17 |