Spring概念:面試
Spring在不一樣的背景下意味着不一樣的東西。它能夠用來引用Spring Framework項目自己,它就是一切開始的地方。隨着時間的推移,其餘Spring項目已經構建在Spring Framework之上。大多數狀況下,當人們說「春天」時,他們就意味着整個項目家族。本參考文檔側重於基礎:Spring Framework自己。spring
Spring框架分爲幾個模塊。應用程序能夠選擇所需的模塊。核心是核心容器的模塊,包括配置模型和依賴注入機制。除此以外,Spring Framework還爲不一樣的應用程序體系結構提供了基礎支持,包括消息傳遞,事務數據和持久性以及Web。它還包括基於Servlet的Spring MVC Web框架,以及Spring WebFlux響應式Web框架。編程
關於模塊的說明:Spring的框架jar容許部署到JDK 9的模塊路徑(「Jigsaw」)。爲了在支持Jigsaw的應用程序中使用,Spring Framework 5 jar帶有「Automatic-Module-Name」清單條目,它們定義了獨立於jar工件的穩定語言級模塊名稱(「spring.core」,「spring.context」等)名稱(罐子使用相同的命名模式,而不是「。」,例如「spring-core」和「spring-context」)。固然,Spring的框架jar在JDK 8和9+上的類路徑上都能正常工做。設計模式
Spring的歷史和Spring框架:服務器
Spring於2003年成立,是對早期J2EE規範複雜性的迴應 。雖然有些人認爲Java EE和Spring處於競爭中,但Spring其實是對Java EE的補充。Spring編程模型不包含Java EE平臺規範; 相反,它集成了EE保護傘中精心挑選的個別規格:併發
Servlet APIapp
WebSocket API框架
併發實用程序測試
JSON綁定API搜索引擎
Bean驗證
JPA
JMS
以及必要時用於事務協調的JTA / JCA設置。
Spring Framework還支持依賴注入和Common Annotations規範,應用程序開發人員能夠選擇使用這些規範,而不是Spring Framework提供的Spring特定機制。
從Spring Framework 5.0開始,Spring至少須要Java EE 7級別(例如Servlet 3.1 +,JPA 2.1+) - 同時在Java EE 8級別提供與新API的開箱即用集成(例如,Servlet 4.0,JSON綁定API)在運行時遇到。這使Spring與Tomcat 8和9,WebSphere 9和JBoss EAP 7徹底兼容。
隨着時間的推移,Java EE在應用程序開發中的做用也在不斷髮展。在Java EE和Spring的早期,建立了應用程序以部署到應用程序服務器。今天,在Spring Boot的幫助下,應用程序以devops和雲友好的方式建立,Servlet容器嵌入而且變得微不足道。從Spring Framework 5開始,WebFlux應用程序甚至不直接使用Servlet API,而且能夠在不是Servlet容器的服務器(例如Netty)上運行。
Spring繼續創新並不斷髮展。除了Spring Framework以外,還有其餘項目,例如Spring Boot,Spring Security,Spring Data,Spring Cloud,Spring Batch等。重要的是要記住每一個項目都有本身的源代碼存儲庫,問題跟蹤器和發佈節奏。有關Spring項目的完整列表,請參見spring.io/projects。
spring優勢:
1. 方便解耦,簡化開發 (高內聚低耦合)
Spring就是一個大工廠(容器),能夠將全部對象建立和依賴關係維護,交給Spring管理
spring工廠是用於生成bean (靜態工廠模式)
面試題:spring的IoC(控制反轉)底層用到什麼設計模式?-- 靜態工廠模式
2. AOP編程的支持
Spring提供面向切面編程,能夠方便的實現對程序進行權限攔截、運行監控等功能
打印日誌
面試題: aop的底層運用到什麼設計模式? -- 動態代理
3. 聲明式事務的支持 (AOP 動態代理)
只須要經過配置就能夠完成對事務的管理,而無需手動編程
4. 方便程序的測試
Spring對Junit4支持,能夠經過註解方便的測試Spring程序
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("applicationContext.xml")
5. 方便集成各類優秀框架 *****
Spring不排斥各類優秀的開源框架,其內部提供了對各類優秀框架(如:Struts、Hibernate、MyBatis、Quartz(任務調度)等)的直接支持
Redis
Solr 搜索引擎
消息隊列 ActiveMQ
……
6. 下降JavaEE API的使用難度 EJB
Spring 對JavaEE開發中很是難用的一些API(JDBC、JavaMail、遠程調用等),都提供了封裝,使這些API應用難度大大下降