Spring/Dependency Injection/Inversion of Control(IoC)

12 Aug 2023

Spring မှာ @Autowired နောက်မှာဘာတွေလုပ်သွားသလဲ

Spring က အဓိက DI(Dependency Injection) ကို popularize လုပ်လာတဲ့ framework ဆိုမမှားဘူး။
DI ဆိုတာ ဘာလဲက ဒီမှာရေးထားတယ် https://www.facebook.com/thet.khine.587/posts/pfbid02MgDdq9VPnTqySii22hUg4Kw2Y2Neh6pqcHT1C8Ddu5DYB34vkWyGbQwRo71fTZntl

Spring ကို IoC container လို့လဲခေါ်တယ် IoC ကဒီမှာရေးထားတယ် https://www.facebook.com/thet.khine.587/posts/pfbid032SJqRq4zS1QzFvivPgw7eNKekFtMjsxaNvuW6sFjrKFRxe3utiPoS77PQqwa8mesl

အပေါ်က ၂ ခုကိုနားလည်မှ ဘာလို့ Autowired လုပ်ရသလဲ ဘာတွေ အကျိုးရှိသလဲဆိုတာသိမှာ။
အဓိကအားဖြင့် Dependency တွေကို ုAutowired လုပ်ကြတယ်။ Dependency ဆိုတာ ဥပမာ
class Car
{
Engine engine;

Car(Engine engine)
{
this.engine = engine;
}
}

Car ဆိုတဲ့ object တည်ဆောက်ဖို့ engine လိုတယ် engine သည် Car ဖို့ Dependencyပဲ။
အဲ့တော့ engine ကို manually တည်ဆောက်ပြီး Car constructor ထဲပေးရမယ်။
အဲ့မှာပြဿနာက Dependency graph ကများလာရင် ဥပမာ

A က B ကိုလိုတယ်။ B က C ကိုလိုတယ်။
ဒါဆို IoC container ကနေပြီးတော့ C ကိုအရင်ဆောက်မယ်ပီဲးတော့မှ B ထဲကို inject လုပ်မယ်( parameter အရ type အရထဲ့ပေးလိုက်မယ်ပေါ့ဗျာ)။
B ဆောက်ပြီးတော့မှ A ကိုဆောက်မယ် အဲ့လို bean creation လုပ်တာတွေကို container ကနေလုပ်သွားတာ။
ခုနက Dependency တွေကို framework ကဆောက် ပြီးတော့ auto inject လုပ်သွားတာကို Dependency Injection လို့ခေါ်တာ။

Developer အနေနဲ့က အလုပ်မရှုပ်တော့ဘူးပေါ့။ Bean creation , destroying စတာတွေသူ manage လုပ်စရာမလိုတော့ဘူး။
ဘယ်သူ့ကိုအရင်ဆောက်ရမယ် ဘယ်သူပြီး ဘယ်သူ့အလှည့် ဒါတွေ အာရုံစားစရာမလိုတော့ဘူး။

Autowired လုပ်မဲ့‌ bean တွေကို Component, Controller,RestController, Serivce, Repository ဆိုပြီးတော့ annotation တွေနဲ့ mark လုပ်ရတယ်။

အဲ့ sterotype တွေက ဘာလုပ်ပေးလဲဆိုတော့ added functionality ကို AOP ဒါမှမဟုတ် proxy သုံးပြီး Spring Container ကနေထဲ့ပေးတာ။
ဥပမာ Controller, RestController တွေဆို API route တွေ အနေနဲ့ spring က register ပေးတာမျိုး။

Original link

crd=>(https://m.facebook.com/story.php?story_fbid=pfbid0kxeBiKPqwvV8UMLkoKD34swDk3aVDkrH2vitoAp5Q4XuLX3dvbn4xQYJoL1ZsX76l&id=1819241055&mibextid=Nif5oz)

Leave a comment