μΆμ ν΄λμ€μμ @PostConstructλ₯Ό μ¬μ©ν λ
μ ν리μΌμ΄μ μ€ν μ μ΄κΈ°νν΄μΌνλ λ‘μ§μ΄ νμν κ²½μ° ApplicationReadyEventμ λν μ΄λ²€νΈ 리μ€λλ₯Ό μμ±νκ±°λ @PostConstructκ° μ μΈλ ν¨μ λλ InitializeBean μΈν°νμ΄μ€μ afterPropertiesSet ν¨μλ₯Ό μ€λ²λΌμ΄λ©νμ¬ μνν μ μλ€. μ΄ μ€μμ μ€λμ @PostConstructλ₯Ό μΆμ ν΄λμ€μ μ μΈνμλμ λ¬Έμ μ λν΄ λ€λ£¨μ΄λ³΄λ €κ³ νλ€.
@PostConstruct with abstract class
μ¬λ¬κ°μ§ μλΉμ€ λ‘μ§μμ μ¬μ©νλλ° κ³΅ν΅μ μΌλ‘ μ¬μ©λ ν¨μλ νλλ₯Ό μ 곡νκΈ° μνμ¬ μλΉμ€ ν΄λμ€μ λν μΆμ ν΄λμ€λ₯Ό λ§λ€ μ μλ€. λ§μ½, μλμ κ°μ΄ @PostConstructκ° μ μΈλ ν¨μλ₯Ό λ§λ€μκ³ μ΄λ₯Ό νμ₯ν΄μ λ§λ A μλΉμ€, B μλΉμ€, C μλΉμ€κ° μλ€κ³ κ°μ νλ©΄ initialize ν¨μλ λͺλ² νΈμΆλ κΉ?
@Service
public abstract class AbstractService {
@PostConstruct
public void init() {
System.out.println(getClass().getSimpleName() + "initialize");
}
}
AService initialize
BService initialize
CService initialize
μ λ΅μ 1λ²λ 4λ²λ μλ μΆμ ν΄λμ€λ₯Ό μ μΈν A,B,C μλΉμ€ 3λ² νΈμΆλ¨μ μ μ μλ€.
μ κ· νλ‘μ νΈμμ μμ μμ€ν μ μμ‘΄ν¨μ λ°λΌ API ν΅μ μ μν μΈμ¦ ν ν°μ λ°κΈν΄μ€λ λ‘μ§μ init ν¨μμ ꡬνν΄λμλ€. λ‘컬μμ κ°λ°νλ€κ° μμ μμ€ν κ³Όμ ν΅μ μ λν νΈλ μ΄μ€ λ‘κ·Έλ₯Ό νμ±ννκ³ μ ν리μΌμ΄μ μλ² λ‘κ·Έλ₯Ό μ΄ν΄λ³΄λ μ€ μ ν리μΌμ΄μ μ€ν μ μΈμ¦ ν ν° λ°κΈμ μν μμ²μ΄ μ£Όλ₯΄λ₯΅ μλΉμ€ κ°μλ§νΌ νΈμΆλλ κ²μ νμΈνκ² λμλ€.
μλΉμ€ ν΄λμ€λ§λ€ κ°λ³λ‘ λ°κΈνμ¬ μ¬μ©νλ©΄ μλ―Έκ° μμ μ μμ§λ§ μ¬λ¬λ² μμ²νλλΌλ μμ μμ€ν μμ λμΌν ν ν°μ λ°κΈμ ν΄μ£Όλλ‘ κ΅¬νλμ΄ μμΌλ―λ‘ AbstractService κΈ°μ€μΌλ‘ λ¨ νλ²λ§ λ°κΈλλ©΄ λλκ² μλλ λμμΌλ‘ νλ¨νλ€. μ΄μ λν ν΄κ²°μ± μΌλ‘ μΈμ¦ ν ν°μ AbstractServiceμ ν΄λμ€ λ΄λΆ λ³μκ° μλ μ μ λ³μλ‘ λ³ννκ³ init ν¨μμμ ν ν° λ°κΈ μ 무λ₯Ό μ°μ μ μΌλ‘ νμΈνμ¬ ν ν°μ΄ μλ κ²½μ°μλ§ λ°κΈ λ‘μ§μ μννλλ‘ μμ νλ€.
κ΄λ ¨λ μ»€λ° νμ€ν 리λ₯Ό μ°Ύμ보λ ν΄λΉ μ½λκ° μμ±λ κ²μ νλ‘μ νΈ μ΄κΈ°μμΌλ©° λΉμμλ μΆμ ν΄λμ€λ₯Ό νμ₯ν μλΉμ€ ν΄λμ€κ° λ¨ νλμλλ°μ. κ·Έλμ λΉμμλ μΈμ§νμ§ λͺ»νκ³ νΈλ μ΄μ€ λ‘κ·Έλ₯Ό νμ±νν΄λ³Έ μ§κΈμμμΌ λ΄μ¬λ μ€λ₯ μλ κ²°ν¨μ΄ λ°κ²¬λμμ κ² κ°μ΅λλ€.