Spring的特性到底是什么?
spring之所以崛起是因為它有著最重要的特性-IOC!
IOC:即Inversion of control,意為控制反轉,原本兩個互相依賴的類,需要通過new對象的方式,然后提供方法調用,這樣類中會出現大量的new(比如類中有十個方法,每個方法都要new一次),這個對象創建的方式是開發者自己主觀控制的,而引入了IOC之后,通過依賴注入(DI,IOC的主要實現方式)需要依賴的類,然后會在運行使用的時候,由容器自行創建一個實例對象提供使用,實現了容器對對象的控制,這樣就實現了對象控制的反轉!

spring又是如何實現IOC的呢?我們知道spring項目會使用xml配置(bean定義)或者注解(@service.@component等)進行對象的定義,其中包括了需要管理的對象的類路徑,在spring容器啟動的時候,會通過BeanFactory(當然通常是這個接口的實現ApplicationContext)將類路徑以hashMap的方式進行存儲,然后再需要使用的時候取出類路徑,再通過反射技術(class.forName)得到相應的實例對象,并把對象引用傳遞(注入)給依賴的類中,進行使用!
當然,除了IOC和DI,spring鼎鼎大名的還有AOP(Aspect Oreinted Programming)功能,意為面向切面編程,通過對一個方法的切入,可以在方法前置,后置等進行處理!對諸如日志打印,前置安全檢驗,攔截等都可以通過AOP進行實現,而原本的方法不需要感知這些操作,專注于業務功能開發,這樣徹底解耦了技術和業務代碼的實現!

不僅如此,spring還提供了對于其他功能框架良好的支持和擴展,比如緩存,事務,數據庫連接,安全認證,測試等等都能有插件化的支持,方便基于spring搭建一套完整的,功能齊備的應用!
現在的spring家族,因為加入了springboot,springcloud等成熟,集成化的框架,對開發者來說更是福音!不僅對各種功能有著開箱即用的便利,還能快速搭建一套微服務,對于服務注冊與發現,網關,雪崩熔斷等都有集成使用!隨著微服務的進程逐漸加快,可以說spring還必將大放光彩!
spring不僅解耦了對象關聯,還解耦了業務和技術,同事提供了成熟的集成方案,是JAVA開發者沒辦法拒絕的框架
