Bean
μ€νλ§ νλ μμν¬μμ μ¬μ©νλ POJO λͺ¨λΈμ κΈ°λ°μΌλ‘ νλ©° μ΄λ IoC μνμ ν΄μ£Όλ κΈ°λ₯μ νλ€.
μ΄ Bean μ Bean Factory μ λ°μ ν κ΄λ ¨μ΄ μλ€.
Bean Factory λ Bean μ μλͺ μ£ΌκΈ°λ₯Ό κ΄λ¦¬νλ©° λμ²΄λ‘ Bean Factory μ κΈ°λ₯μ νμ₯ν Application Context λ₯Ό μ¬μ©νλ€.
Spring Bean μ νΉλ³ν κ²½μ°λ₯Ό μ μΈνκ³ λ Singleton μΌλ‘ μμ±λλ€.
Bean Container (= IoC Container)
- κ°μ²΄λ₯Ό κ΄λ¦¬νλ 컨ν μ΄λλ‘μ¨ μ»¨ν μ΄λμ κ°μ²΄λ₯Ό λ΄μλκ³ νμν λμ 컨ν μ΄λμμ κ°μ²΄λ₯Ό κ°μ Έμ μ¬μ©ν μ μλλ‘ νλ€.
- IoC λ°©μμΌλ‘ Bean μ κ΄λ¦¬νλ€λ μλ―Έμμ Bean Factory λ Application Context λ₯Ό κ°λ₯΄ν¨λ€.
Bean Factory
- μ€νλ§μ΄ IoC λ₯Ό λ΄λΉνλ ν΅μ¬ 컨ν μ΄λ
- Bean μ λ±λ‘/μμ±/μ‘°ν/λ°ν/κ΄λ¦¬ νλ κΈ°λ₯μΌλ‘ Bean Factory μ κ°μ§λ§ μ¬κΈ°μ μ€νλ§μ κ°μ’ λΆκ°μλΉμ€λ₯Ό μΆκ°λ‘ μ 곡ν΄μΌ νλ€.
Application Context
λλΆλΆμ κΈ°λ₯λ€μ Bean Factory μ λμΌν μνκ³Ό κΈ°λ₯λ€μ μννλ λΆκ°μ μΌλ‘ μ 곡λλ κΈ°λ₯λ€μ΄ μλ€. (Bean Factory μΈν°νμ΄μ€λ₯Ό μμνλ€)
- μΈμ€ν΄μ€ν μμ μ΄ μμ΄νλ€.
- Application Context λ μ¦μ μΈμ€ν΄μ€λ₯Ό λ§λλ Pre-loading μ νκ³
- Bean Factory λ lazy-loading μ νμ¬ μ€μ λ‘ μμ² λ°λ μμ μ μΈμ€ν΄μ€λ₯Ό λ§λ λ€.
- Bean Factory λ₯Ό νμ₯ν IoC 컨ν
μ΄λμ΄λ©° μΌλ°μ μΌλ‘ μν°νλΌμ΄μ¦ν μ΄ν리μΌμ΄μ
μ Application Context λ₯Ό μ¬μ©νλκ² λ«λ€κ³ νλ€.
BeanPostProcessor
νμ₯ ν¬μΈνΈλ₯Ό μ¬μ©ν μ μκ³ νΈλμμ κ³Ό AOP μ κ°μ μλΉν μμ μ§μμ λ°μ μ μλ€κ³ νλ€.
Feature | BeanFactory | ApplicationContext |
---|---|---|
Bean instantiation/wiring | Yes | Yes |
Automatic BeanPostProcessor registration | No | Yes |
Automatic BeanFactoryPostProcessor registration | No | Yes |
Convenient MessageSource access (for i18n) | No | Yes |
ApplicationEvent publication | No | Yes |
μ°Έκ³ μλ£
POJO (Plain Old Java Object)
Sun μ Java Bean μ΄λ EJB μ Bean μ λ»νλ κ²μ΄ μλ μμνκ² getter
, setter
λ©μλλ‘λ§ μ΄λ£¨μ΄μ§ Value Object μ±μ Bean μ μλ―Ένλ€.
μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ μ½λμ΄λ€.
public class SimpleBean {
private String name;
private String age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(String age) {
this.age = age;
}
public String getAge() {
return this.age;
}
}
μ€νλ§μμ POJO κ° μ€μν νΉμ§μΈ μ΄μ λ λ€μκ³Ό κ°μ νΉμ±μ κ°μ§κΈ° λλ¬Έμ΄λ€.
- ν΄λμ€μ μμμ κ°μ νμ§ μλλ€.
- μΈν°νμ΄μ€μ ꡬνμ κ°μ νμ§ μλλ€.
- μ΄λ Έν μ΄μ μ μ¬μ©μ κ°μ νμ§ μλλ€.
λλ¬Έμ μ¬μ©μλ λΌμ΄λΈλ¬λ¦¬λ 컨ν μ΄λμ λ³λ κΈ°μ μ μ’ μμ μ΄μ§ μλ μνλ‘ κ°μ₯ μΌλ°μ μΈ μ½λλ‘ μμ±ν μ μλ€λ κ²μ΄λ€.
Spring Bean Life Cycle
Spring Bean Life Cycle μ μ΅μ΄μ Bean Object κ° μμ±λκ³
DI μμ‘΄μ± μ£Όμ
ν μ΄κΈ°ν μμ
μ΄ λλλ©΄ Bean μλΉμ€κ° κ°λ₯ν μ€λΉ μνκ° μλ£λλ€.
μ΄ν 컨ν μ΄λκ° μ’ λ£λ λ νΈμΆλμ μ¬μ©μ€μΈ λΉ λ¦¬μμ€λ₯Ό λ°ννκ±°λ μ’ λ£μ μ μ²λ¦¬λμΌ ν μμ λ€λ λ³λ μ§μ μ΄ κ°λ₯νλ€.
μ΄κΈ°ν λ©μλ (initalization-method)
- Spring Framework λ λ¨Όμ
Bean
μ€μ νμΌμ POJO λΉμ Instance ν νμ§ μμ μνλ‘Bean
μ€μ νμΌμ μ 보λ₯Ό μ΄κΈ°ν νλ€.- λΉ μ€μ νμΌμ μ 보λ₯Ό μ΄κΈ°ν νλ©΄μ XML DTD μ λνμ¬ μ ν¨νμ§ μ²΄ν¬νλ€.
- Bean Instance λ₯Ό μμ±νλ©΄μ μμ‘΄ κ΄κ³μ μλ Bean μ΄ μ‘΄μ¬νλμ§ μ¬λΆλ₯Ό 체ν¬νλ€.
- μμ‘΄ κ΄κ³κ° μλ Bean μΈ κ²½μ° μ΄κΈ°νκ° μ€ν¨ νλ€.
- μμ‘΄ κ΄κ³κ° μλ λΉμ 체ν¬κ° μλ£λλ©΄
setter Method
λ₯Ό νΈμΆνκ±°λ μμ±μμ μΈμλ‘ μ€μ§μ μΈ κ°μ μΆκ°νκ±°λ λ€λ₯Έ Bean μ λν Reference λ‘ μ λ¬νλ€. - Application Context λ₯Ό μ΄μ©νμ¬ μ΄κΈ°νλ₯Ό μ€ννλ€.
- μμ±ν Bean μ΄ BeanNameAware Instance μ΄λ©΄
setBeanName()
Method λ₯Ό νΈμΆνλ€. - μμ±ν Bean μ΄ BeanFactoryAware Instance μ΄λ©΄
setBeanFactory()
Method λ₯Ό νΈμΆνλ€. - μμ±ν Bean μ΄ ApplicationContextAware Instance μ΄λ©΄
setApplicationContext()
Method λ₯Ό νΈμΆνλ€. - μμ±ν Bean μ΄ InitalizingBean μΈμ€ν΄μ€μ΄λ©΄
afterProperties()
Method λ₯Ό νΈμΆνλ€.
- μμ±ν Bean μ΄ BeanNameAware Instance μ΄λ©΄
- μμ±ν Bean μ μ€μ νμΌμ init-method κ° μ€μ λμ΄ μλ€λ©΄ init-method μ ν΄λΉνλ Method λ₯Ό νΈμΆνλ€.
μ’ λ£ λ©μλ (destruction-method) λ₯Ό νΈμΆνλ κ³Όμ
- μμ±ν Bean μ΄ DisposableBean Instance μ΄λ©΄
distory
Method λ₯Ό νΈμΆνλ€. - μμ±ν Bean μ€μ νμΌμ distory-method κ° μ€μ λμ΄ μμΌλ©΄
destory
Method μ ν΄λΉνλ λ©μλλ₯Ό νΈμΆνλ€.
Bean Life Cycle μ 컀μ€ν°λ§μ΄μ§ νμ¬ μ μ΄ ν μ μλ€.
μ°Έκ³ μλ£
http://javaslave.tistory.com/48
https://gmlwjd9405.github.io/2018/11/10/spring-beans.html
https://unabated.tistory.com/entry/Spring-Bean-μ΄κΈ°ν-λ°-μλͺ
μ£ΌκΈ°
https://cornswrold.tistory.com/100
https://howtodoinjava.com/spring-core/spring-bean-life-cycle/
Bean λ‘λ μμλ₯Ό κ²°μ μ§λ λ°©λ²
Bean λ΄λΆμ μΌλ‘λ μμ± μμμ λ°λΌ μλ¬κ° λμ¬μ μκΈ° λλ¬Έμ ν΄λΉ μν©μμλ λΉ μμ± μμλ₯Ό μ ν΄μ£Όλ κ²μ΄ λ«λ€
@DependsOn
- μμ‘΄μ± κ³ λ¦¬λ₯Ό μ€νλ§μκ² μλ €μ€λ€.
@PostConstruct
- ν΄λΉ μ»΄ν¬λνΈκ° μμ ν μμ±λ ν νλ²μ μ€νν΄μΌ ν μΌμ μ½λ©ν λ©μλμ λΆμ΄λ κ²μ΄λ€.
@Order
- μ£Όμ μμλ₯Ό μ ν΄ μ€
μ°Έκ³ μλ£
@Bean
vs @Component
μ°¨μ΄
@Bean
- μΈλΆ λΌμ΄λΈλ¬λ¦¬λ€μ μ¬μ©μ Bean μΌλ‘ λ±λ‘νκ³ μΆμ κ²½μ°
@Component
- μ¬μ©μκ° μ§μ 컨νΈλ‘€μ΄ κ°λ₯ν Class μΈ κ²½μ°
μ¬μ©μκ° μμ±ν ν΄λμ€μ @Bean
μ μΈμ λΆκ°λ₯νλ€ μ΄λ κ°μ μ μΈν μ μλ νμ
μ΄ μ ν΄μ Έ μμ΄ ν΄λΉ μ©λλ₯Ό λ²μ΄λλ©΄ μ»΄νμΌ μλ¬λ₯Ό λ°μμν¨λ€.
Bean Scope
eGov λ° Spring Reference (4.2.5) μμ λ°μ·ν Bean Scope μ μ’ λ₯μ΄λ€.
Scope | Description | eGov | Spring Reference |
---|---|---|---|
Global Session | νλμ Bean μ μμ λν΄μ νλμ global HTTP Sessionμ μλͺ
μ£ΌκΈ° μμ λ¨ νλμ κ°μ²΄λ§ μ‘΄μ¬νλ€. μΌλ°μ μΌλ‘ portlet context μμμ μ ν¨νλ€. Web-aware Spring ApplicationContext μμμλ§ μ ν¨νλ€. | O | O |
Prototype | νλμ Bean μ μμ λν΄μ λ€μμ κ°μ²΄κ° μ‘΄μ¬ν μ μλ€. | O | O |
Request | νλμ Bean μ μμ λν΄μ νλμ HTTP requestμ μλͺ
μ£ΌκΈ° μμ λ¨ νλμ κ°μ²΄λ§ μ‘΄μ¬νλ€ μ¦, κ°κ°μ HTTP requestλ μμ λ§μ κ°μ²΄λ₯Ό κ°μ§λ€. Web-aware Spring ApplicationContext μμμλ§ μ ν¨νλ€. | O | O |
session | νλμ Bean μ μμ λν΄μ νλμ HTTP Sessionμ μλͺ
μ£ΌκΈ° μμ λ¨ νλμ κ°μ²΄λ§ μ‘΄μ¬νλ€. Web-aware Spring ApplicationContext μμμλ§ μ ν¨νλ€. | O | O |
singleton | νλμ Bean μ μμ λν΄μ Spring IoC Container λ΄μ λ¨ νλμ κ°μ²΄λ§ μ‘΄μ¬νλ€. | O | O |
application | μλΈλ¦Ώ 컨ν
μ€νΈμ λΌμ΄νμ¬μ΄ν΄μ μ μλλ€. Spring Application Context λ΄μμλ§ μ ν¨νλ€. | X | O |
β IoC Dispatcher Servlet β