1.Spring是一個輕量級的開源框架,是為解決企業級應用開發的復雜性而創建的,通過核心的Bean factory實現了底層的類的實例化和生命周期的管理。
Spring的最根本使命是:簡化java開發。

3.一些重要的Spring Framework模塊是:
- Spring Core: 基礎,可以說 Spring 其他所有的功能都需要依賴於該類庫。主要提供 IOC 依賴注入功能。
- **Spring Aspects ** : 該模塊為與AspectJ的集成提供支持。
- Spring AOP :提供了面向方面的編程實現。
- Spring JDBC : Java數據庫連接。
- Spring JMS :Java消息服務。
- Spring ORM : 用於支持Hibernate等ORM工具。
- Spring Web : 為創建Web應用程序提供支持。
- Spring Test : 提供了對 JUnit 和 TestNG 測試的支持。
IoC(Inverse of Control:控制反轉)而是一種設計思想,就是 將原本在程序中手動創建對象的控制權,交由Spring框架來管理。 IoC 在其他語言中也有應用,並非 Spirng 特有。 IoC 容器是 Spring 用來實現 IoC 的載體, IoC 容器實際上就是個Map(key,value),Map 中存放的是各種對象。
將對象之間的相互依賴關系交給 IOC 容器來管理,並由 IOC 容器完成對象的注入。這樣可以很大程度上簡化應用的開發,把應用從復雜的依賴關系中解放出來。 IOC 容器就像是一個工廠一樣,當我們需要創建一個對象的時候,只需要配置好配置文件/注解即可,完全不用考慮對象是如何被創建出來的。 在實際項目中一個 Service 類可能有幾百甚至上千個類作為它的底層,假如我們需要實例化這個 Service,你可能要每次都要搞清這個 Service 所有底層類的構造函數,這可能會把人逼瘋。如果利用 IOC 的話,你只需要配置好,然后在需要的地方引用就行了,這大大增加了項目的可維護性且降低了開發難度。
Spring 時代我們一般通過 XML 文件來配置 Bean,后來開發人員覺得 XML 文件來配置不太好,於是 SpringBoot 注解配置就慢慢開始流行起來。
推薦閱讀:https://www.zhihu.com/question/23277575/answer/169698662
Spring IOC的初始化過程:

IOC源碼閱讀
AOP(Aspect-Oriented Programming:面向切面編程)能夠將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任(例如事務處理、日志管理、權限控制等)封裝起來,便於減少系統的重復代碼,降低模塊間的耦合度,並有利於未來的可拓展性和可維護性。
Spring AOP就是基於動態代理的,如果要代理的對象,實現了某個接口,那么Spring AOP會使用JDK Proxy,去創建代理對象,而對於沒有實現接口的對象,就無法使用 JDK Proxy 去進行代理了,這時候Spring AOP會使用Cglib ,這時候Spring AOP會使用 Cglib 生成一個被代理對象的子類來作為代理,如下圖所示:
當然你也可以使用 AspectJ ,Spring AOP 已經集成了AspectJ ,AspectJ 應該算的上是 Java 生態系統中最完整的 AOP 框架了。
使用 AOP 之后我們可以把一些通用功能抽象出來,在需要用到的地方直接使用即可,這樣大大簡化了代碼量。我們需要增加新功能時也方便,這樣也提高了系統擴展性。日志功能、事務管理等等場景都用到了 AOP 。
AOP :面向切面編程