Spring Application μ΄ μμλκ³ λ λ€μ Spring μ, λ μ ννκ² λ§νλ©΄ ApplicationContext κ° λͺ¨λ Bean μ λν instance λ₯Ό μμ±νκ³ , initialize νλ€.
Lazy Initialization μ λͺ¨λ Bean μ μ€ν μ΄κΈ°μ initialize νλ κ²μ΄ μλλΌ, DI λ±κ³Ό κ°μ explicit ν request κ° μμ λ ApplicationContext κ° Bean μ μμ±νκ³ initialize νλ κ²μ΄λ€. Application μ startup μκ°μ λΉ λ₯΄κ² ν μ μλ μ₯μ μ΄ μ‘΄μ¬νλ€. λμ μμλ λ€μκ³Ό κ°λ€.
/dailyworkendpoint μ μ κ·ΌFootballCoachμ λν instance λ₯Ό μ΄ λ μμ±- μ΄ν
DemoControllerμ λν instance λ₯Ό μμ±νκ³FootballCoachλ₯Ό inject
μ¬μ© λ°©λ²μ λ¨μν Lazy Initialization μ μν€κ³ μΆμ Bean μ class μ @Lazy annotation μ μΆκ°νλ©΄ λλ€. λͺ¨λ Bean λ€μ λνμ¬ Lazy λ₯Ό μ€μ νκ³ μΆμ λλ μ΄λ»κ² ν κΉ?
λ¬Όλ‘ Bean μ΄ μ μΌλ©΄ λͺ¨λ class μ λνμ¬ @Lazy annotation μ μ€μ ν΄μ£Όλ©΄ λμ§λ§, μλλΌλ©΄ μ½κ°μ 무μν λ
Έλμ΄ νμν κ²μ΄λ€. μ΄μ Spring μ global configuration νλ λ°©λ²μ μ 곡νλλ°, application.properties νμΌμ spring.main.lazy-initialization=true codeline μ μΆκ°ν΄μ£Όλ©΄ λλ€.
Disadvatages
Lazy Initialization μ Appilication μ μμ μκ°μ λ¨μΆνκ³ , μ¬μ©νμ§ μλ Bean μ μμ±νμ§ μμμΌλ‘ λ©λͺ¨λ¦¬ μλΉλ₯Ό μ€μΌ μ μλ λ±μ μ₯μ μ΄ μ‘΄μ¬νλ€.
νμ§λ§ λ€μμ λ¨μ μ΄ μ‘΄μ¬νλ€.
-
- λ¬Έμ λ°κ²¬ μ§μ°
- Beanμ΄ μμ²λ λκΉμ§ μ΄κΈ°νλμ§ μμΌλ―λ‘, μλͺ»λ μ€μ μ΄λ μμ‘΄μ± λ¬Έμ λ μ ν리μΌμ΄μ μ€ν μ€μμΌ λ°κ²¬λ μ μμ
- 첫 μμ² μ μ§μ°
- Beanμ΄ μ²μ μ¬μ©λ λ μ΄κΈ°νκ° μ΄λ£¨μ΄μ§λ―λ‘, 첫 λ²μ§Έ μμ² μ μ±λ₯ μ νκ° λ°μν μ μμ
- 볡μ‘ν μμ‘΄μ± κ΄λ¦¬
- μ¬λ¬ Lazy Beanμ΄ μλ‘ μμ‘΄νλ κ²½μ°, μμ‘΄μ± κ·Έλνκ° λ³΅μ‘ν΄μ§κ³ μν μμ‘΄μ± λ¬Έμ κ° λ°μν μ μμ
- κ³ λΆν μν©μμ μ±λ₯ μ ν
- μ΄κΈ°νκ° νμν Beanμ΄ λ§μ κ²½μ°, λμμ μ¬λ¬ μμ²μ΄ λ€μ΄μ€λ©΄ μ΄κΈ°ν μμ μ΄ λͺ°λ € μ±λ₯ λ³λͺ© νμ λ°μ κ°λ₯
λ°λΌμ premature optimization μ ν¨μ μ λΉ μ§λ©΄ μ λλ€. μ΄μ κ°λ°μλ Application μ ꡬ쑰μ μꡬμ¬νμ μ νμ νμ¬ μ μ ν νμ©ν΄μΌ νλ€.
βPremature optimization is the root of all evilβ
Donald Knuth
Lazy Initialization - Test
μ°μ λ€μ @Qualifier λ₯Ό μ¬μ©νλ λ°©μμΌλ‘ λ°κΎΈκ³ , κ° Bean λ€μ constructor μ Bean μ μ΄λ¦μ μΆλ ₯νλλ‘ λ§λ€μλ€. Application μ μ€νν΄λ³΄μ.

보면 ApplicationContext κ° Bean λ€μ μμ±νκ³ initialize νμ¬ κ° Bean μ ν΄λΉνλ μΆλ ₯μ λ³Ό μ μλ€.
μ΄μ BasketballCoach λ§ Lazy Bean μΌλ‘ μ§μ νμ.
@Component
@Lazy
public class BasketballCoach implements Coach { ... }Application μ μ€νν΄λ³΄λ©΄,

μμ κ°μ΄ BaseballCoach Bean λ§ μ μΈνκ³ initialized λ κ²μ λ³Ό μ μλ€.
global νκ² Lazy Initialization μ μ μ©νλ©΄ console μμλ μ΄λ»κ² μΆλ ₯μ΄ λ°μν κΉ? application.properties λ₯Ό ν΅νμ¬ global Lazy Initialization μ μ€μ νκ³ console μ μ΄ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.

ApplicationContext κ° intialized λ μ΄νμ ApplicationContext λ₯Ό ν΅ν΄μ λ°λ‘ Bean μ μμ±νκ³ initialize νλ κ²μ΄ μλλΌ, Application μ΄ μ€νλ μ΄νμ /workout endpoint μ μ κ·Όν λ Bean μ΄ μμ±λκ³ initialized λ κ²μ μ μ μλ€.