2024年1月28日 星期日

[SpringBoot]IoC (Inversion of Control) / BeanFactory / ApplicationContext

 半途而廢仔又來了,這次是看這個網頁,一步一步了解Spring Boot,今天是2024/1/28,Day1,希望可以堅持到Day 100

https://www.geeksforgeeks.org/spring-boot/?ref=lbp


控制反轉Spring IoC (Inversion of Control)

https://www.geeksforgeeks.org/spring-understanding-inversion-of-control-with-example/

There are 2 types of IoC containers:

BeanFactory  ⮕ 最基本版本

ApplicationContext ⮕擴展了BeanFactory的功能


Interface的介紹: https://www.youtube.com/watch?v=RbSnqxlIuik


Spring GA、PRE、SNAPSHOT 版本含义及区别: https://blog.csdn.net/qq_38780765/article/details/105165880


我選擇的專案




初始專案: https://github.com/fenturechance/spring-boot-practice-240128/tree/2764633ec569949f6a1cfcd540dd94a1b21b8b5d


Run-time Polymorphism: https://www.geeksforgeeks.org/difference-between-compile-time-and-run-time-polymorphism-in-java/


加入beans.xml / ApplicationContext / ClassPathXmlApplicationContext: https://github.com/fenturechance/spring-boot-practice-240128/commit/52082039a9bcf98eda76e882ea0f26212aa27a05


---

BeanFactor: https://www.geeksforgeeks.org/spring-beanfactory/?ref=lbp

白話文介紹Bean: https://developer.aliyun.com/article/1205229

白話文介紹IoC與DI: https://medium.com/appxtech/java-spring%E7%99%BD%E8%A9%B1%E6%96%87-%E6%B7%BA%E8%AB%87%E5%AD%B8%E7%BF%92java-spring%E7%9A%84%E5%BF%83%E5%BE%97-a354d2baa80a

把原本的new 建構子時,傳入參數這件事,改到xml去做

白話文文章中: 把食物從雞肉改成豬肉時,只要改xml的屬性就好

上文例子中,TestInterface呼叫時,從TestClass1改成TestClass2,只要改xml就好

Spring Container裡面有很多Object

BeanFactor讀取xml,建立Spring Bean (POJO) Object: https://www.geeksforgeeks.org/pojo-vs-java-beans/

加入constroctor-arg: https://github.com/fenturechance/spring-boot-practice-240128/commit/90a56657251112a2d340631f85eff91e9cc26d4a

---

ApplicationContext: https://www.geeksforgeeks.org/spring-applicationcontext/?ref=lbp

ApplicationContext是BeanFactory的子介面


所有 JavaBean 都是 POJO,但並非所有 POJO 都是 JavaBean

JavaBean: 字段只能由 getter 和 setter 存取 / 只有私有可見性 / 必須有一個無參數建構函數


加入AppConfig: https://github.com/fenturechance/spring-boot-practice-240128/commit/5b69a4eee897fbf06a0b513441ac5315db072392


---

 BeanFactory(I)(已棄用) 和 ApplicationContext(I) 的層次結構: https://www.geeksforgeeks.org/spring-difference-between-beanfactory-and-applicationcontext/?ref=lbp


在 BeanFactory 中,bean 定義的自動組裝模式是透過使用基於 XML 的設定檔中的<bean/>元素的「 autowire」屬性來指定的。


在ApplicationContext中,我們可以在bean類別中的屬性或setter方法之上使用註解“@Autowired” 


ClassPathXmlApplicationContext / ClassPathResource

急切初始化 / 延遲初始化

 https://github.com/fenturechance/spring-boot-practice-240128/commit/5313af4178592893a2403d7ba13592fa4b60ec61


運行結果: 

testInitial

第一次getBean之前

testDestroy

-----

第二次getBean之前

testInitial















沒有留言:

張貼留言