(Spring) Bean μλͺ μ£ΌκΈ°
Spring
06/13/2021
μ€νλ§ λΉμ μ΄λ²€νΈ λΌμ΄νμ¬μ΄ν΄
μ€νλ§ μ»¨ν μ΄λ μμ± β μ€νλ§ λΉ μμ± β μμ‘΄κ΄κ³ μ£Όμ β μ΄κΈ°ν μ½λ°± β μ¬μ© β μλ©Έ μ μ½λ°± β μ€νλ§ μ’ λ£
- μ΄κΈ°ν μ½λ°± : λΉμ΄ μμ±λκ³ , μμ‘΄κ΄κ³ μ£Όμ μ΄ μλ£λ ν νΈμΆ
- μλ©Έμ μ½λ°± : μ€νλ§ μ»¨ν μ΄λκ° μ’ λ£λμ΄ μλ©Έλκ±°λ, λΉμ΄ μλ©ΈλκΈ° μ§μ μ νΈμΆ
μ€νλ§μ 3κ°μ§ λ°©λ²μΌλ‘ λΉ μλͺ μ£ΌκΈ° μ½λ°±μ μ§μνλ€.
- μΈν°νμ΄μ€ (InitializingBean, DisposableBean)
- μ€μ μ 보μ μ΄κΈ°ν λ©μλ, μ’ λ£ λ©μλ μ§μ
- μ΄λ Έν μ΄μ μ§μ (@PostConstruct, @PreDestroy)
κ°μ²΄μ μμ±κ³Ό μ΄κΈ°νμ λΆλ¦¬λ?
μ€νλ§λΉλ κ°μ²΄μ΄κΈ° λλ¬Έμ μ΄κΈ°νκ° νμνλ€. μ£Όλ‘ μΈμ€ν΄μ€κ° μμ±λλ μμ μ μ΄λ€ μμ μ ν λμλ λλΆλΆ μμ±μμμ μ΄λ£¨μ΄μ§λ€.
κ·Έλ¬λ μΈλΆ 컀λ₯μ μ°κ²°(DB 컀λ₯μ , μμΌ ν΅μ ) λ± λ¬΄κ±°μ΄ λμμ μνν κ²½μ°λ§λ€ μμ±μ μ΄κΈ°νλ₯Ό ν΄μ£Όλκ²μ λΉν¨μ¨ μ μ΄λ€.
λλ¬Έμ κ°μ²΄μ μμ±κ³Ό μ΄κΈ°νμμ μ λΆλ¦¬λ₯Ό ν΅ν΄μ κ°μ²΄λ₯Ό μμ±νλ κ²μ μμ±μλ§ μ§μ€νκ³ , μ΄κΈ°νλ μ΄κΈ°νμμλ§ μμ νλ κ².
1. μΈν°νμ΄μ€ InitializingBean, DisposableBean μ΄μ©
public class TestDao implements InitializingBean, DisposableBean {
@Override public void afterPropertiesSet() throws Exception { // λΉ μ΄κΈ°ν μ μ½λ ꡬν }
@Override public void destroy() throws Exception { // λΉ μλ©Έ μ μ½λ ꡬν }}
InitializingBean
- afterPropertiesSet()
DisposableBean
- destroy()
λ¨μ )
- μλ°νμ€ μΈν°νμ΄μ€κ° μλλΌ μ€νλ§ μ μ© μΈν°νμ΄μ€λΌμ μ€νλ§μ μ’ μμ μ΄λ€. μ€νλ§ μμ‘΄μ±μ΄ λμμ§. (νμ§λ§ implementsλ‘ μ΄κΈ°ν, μλ©Έ μΈν°νμ΄μ€λ₯Ό λͺ μμ μΌλ‘ ꡬννκ³ μκΈ° λλ¬Έμ μ’ λ μ§κ΄μ μΌλ‘ νμΈμ΄ κ°λ₯νκ³ νΈλ¦¬ν΄μ μμ§ μΈν°νμ΄μ€ μ¬μ©λ°©λ²μ μ μ§νλ κ²½μ°κ° λ§λ€. )
- μ΄κΈ°ν, μλ©Έ λ©μλμ μ΄λ¦μ λ³κ²½ν μ μλ€.
- μ§μ μ μ΄λ₯Ό ν΄μ£Όμ΄μΌνλ μΈλΆ λΌμ΄λΈλ¬λ¦¬μ μ μ©ν μ μλ€.
- νμ¬λ κ±°μ μ¬μ©νμ§ μλ λ°©λ²μ.
BUT
2. μ€μ μ 보μ μ΄κΈ°ν λ©μλ, μ’ λ£ λ©μλ μ§μ
μ€μ μ 보μ λ€μκ³Ό κ°μ΄ μ΄κΈ°ν, μλ©Έ λ©μλλ₯Ό μ§μ ν μ μλ€.
@Bean(initMethod="init", destroyMethod = "close")
- λ©μλ μ΄λ¦μ μμ λ‘κ² μ€ μ μλ€.
- μ€νλ§ λΉμ΄ μ€νλ§ μ½λμ μμ‘΄νμ§ μλλ€.
- μ½λκ° μλλΌ μ€μ μ 보λ₯Ό μ¬μ©νκΈ° λλ¬Έμ μ½λλ₯Ό κ³ μΉ μ μλ μΈλΆ λΌμ΄λΈλ¬λ¦¬μλ μ΄κΈ°ν, μ’ λ£ λ©μλλ₯Ό μ μ©ν μ μλ€.
μΈλΆ λΌμ΄λΈλ¬λ¦¬μμ μ΄λ»κ² μ¬μ©νλκ°?
μΈλΆλΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν μμλ μΈλΆ λΌμ΄λΈλ¬λ¦¬ λ΄λΆ μ½λλ₯Ό λ³κ²½/μμ ν μ μκΈ° λλ¬Έμ, μ΄κΈ°ν/μλ©Έ λ©μλ μ¬μ©μ μ μ½μ΄ μλ€. κ·Έλ¬λ μΈμ°λΌμ΄λΈλ¬λ¦¬λ₯Ό νΈμΆνλ λ΄λΆ μμ€ ν΄λμ€μμ @Bean μ΄λ Έν μ΄μ μΌλ‘ μ΄κΈ°ν/μλ©Έ λ©μλλ₯Ό μ§μ ν΄μ£Όκ³ μ¬μ©νλ©΄ λλ€.
μ’ λ£ λ©μλ μΆλ‘ κΈ°λ₯
- @Bean μ μ’ λ£λ©μλλ₯Ό λ°λ‘ μ§μ νμ§ μμ μμ μ€νλ§μ΄ μ’ λ£λ©μλλ₯Ό μΆλ‘ ν΄μ μλμΌλ‘ νΈμΆν΄μ€λ€.
- destroyMethod = "" λ‘ νκ±°λ μ€μ μ μμ νμ§ μμ κ²½μ° μΆλ‘ κΈ°λ₯μ΄ μλνλ€.
- λ±λ‘λ Bean μμ μΌλ°μ μΌλ‘ λ§μ΄ μ°μ΄λ μ’ λ£ λ©μλ μ΄λ¦ (close, shutdown λ±) μ λ©μλκ° μμΌλ©΄ μ€νλ§μ΄ μ’ λ£ν λ μλμΌλ‘ νΈμΆν΄μ€
3. @PostConstruct, @PreDestroy
μ΄κΈ°νμ μλ©Έμ μ§μ νλ λ μ΄λ Έν μ΄μ μ μ¬μ©νλ©΄ νΈλ¦¬νκ² μ΄κΈ°νμ μ’ λ£λ₯Ό μ€νν μ μλ€.
- μ€νλ§μ μ’ μμ μΈ κΈ°μ μ΄ μλλΌ μλ° νμ€ κΈ°μ μ. λ°λΌμ μ€νλ§μ΄ μλ 컨ν μ΄λμμλ μ μλ.
- μ»΄ν¬λνΈ μ€μΊκ³Ό μ μ΄μΈλ¦Ό (μ΄λ»κ² μ μ΄μΈλ¦°λ€λ κ±°μ§?)
- λ¨μ ) μΈλΆ λΌμ΄λΈλ¬λ¦¬μμ μ μ©νμ§ λͺ»ν¨. μ΄λ΄λλ @Bean κΈ°λ₯μ μ¬μ©νλ©΄ ν΄κ²°λ¨
- @PostConstruct
- μ΄κΈ°ν μμ μ ν λ©μλμ μ μ©λλ€.
- WASκ° λμμ§ λ μ€νλλ€. (κ°μ²΄κ° μμ±λκ³ μμ‘΄μ± μ£Όμ μ΄ λ νμ)
- @PreDestroy
- 컨ν μ΄λμμ κ°μ²΄λ₯Ό μ κ±°νκΈ° μ μ μ€νλλ€.
μ°Έμ‘°
https://velog.io/@hellozin/μ€νλ§-λΉμ-μμ±μ-afterPropertiesSet-PostConstruct
https://velog.io/@hyungjungoo95/Spring-λΉ-μλͺ μ£ΌκΈ°-μ½λ°±
- (Spring) λΉ λ±λ‘λ°©λ², μμ‘΄κ΄κ³ μλμ£Όμ , lombok
- (SpringBoot) JPA λ§€ν μ΄λ Έν μ΄μ - @Entity, @Table, @Column, @Id